30/04/2013 Prof. Hudson Costa PROLOG é uma linguagem de programação que é utilizada para resolver problemas que envolvam objetos e relações entre objetos. Em PROLOG o que se define basicamente são objetos e relações entre esses objetos. Para se referir a objetos, usamos termos. Um termo é uma constante, uma variável ou um termo composto. Para baixar: www.swi-prolog.org 1 30/04/2013 Lógica como linguagem de programação. Raciocínio dedutivo sobre fatos e regras. Processamento simbólico, Semântica declarativa, procedimental e operacional. Programas = Lógica + Controle. Programas = Especificações Formais. Programas = Protótipos. Programas = Bases de dados. Programas = Programas... Declaração de fatos sobre objetos e suas relações; Definições de regras sobre os objetos e suas relações; Questões que são feitas sobre os objetos e suas relações 2 30/04/2013 homem(sócrates). mortal(X) homem(X). Sócrates é homem. Todo homem é mortal. Quem é mortal? Sócrates é mortal. ?- mortal(Z). Z = sócrates. Átomos Da mesma forma que o Português, PROLOG possui palavras e frases. O tipo de palavra mais comum em PROLOG é denominado átomo. Alguns exemplos de átomos são: lápis, ana, brasil, livro, tesoura, guarda-roupa. Note que os átomos começam com letra minúscula até mesmo quando são nomes próprios. Predicado Predicado é a construção usada para declarar algo a respeito de objetos. Em PROLOG, a declaração é representada por um átomo e é seguida pelos objetos, que devem ser colocados entre parênteses e estar separados uns dos outros por vírgulas. Frases As frases mais simples da linguagem PROLOG são constituídas por um único predicado. Quando estas frases são usadas para dizer alguma coisa ao computador, elas são afirmativas e terminam com um ponto final. A seguir, mostramos vários exemplos de frases simples afirmativas. 3 30/04/2013 Fatos Os fatos são os elementos fundamentais da programação em PROLOG, pois determinam as relações que existem entre os objetos conhecidos. Questões Uma questão é escrita da mesma maneira que um fato, sendo diferenciada pelo interpretador ou por sua colocação em um local previamente definido e separado dos fatos. Quando uma questão é feita, o PROLOG realiza uma busca na Base de Conhecimento, procurando um Fato que seja igual ao da questão. Dizemos que dois fatos (ou um fato e uma questão) são unificam (são iguais) se: Seus predicados são os mesmos, Eles possuem o mesmo número de argumentos e, Os argumentos são iguais. O PROLOG encontra um fato que se iguala a questão, ele retorna "YES", indicando que a questão tem resposta verdadeira; caso contrário, ele retorna "NO". NOTA: Para padronizar a criação de predicados (tanto os fatos quanto as regras), devemos sempre pensar que o predicado é uma propriedade do primeiro objeto do argumento. Assim, "gosta (joão, maria)." deve ser lido como "João gosta de Maria". 4 30/04/2013 Uma variável em PROLOG sempre começa com uma letra maiúscula. Uma variável pode estar instanciada ou não-instanciada. Dizemos que ela está instanciada quando estiver assumindo o valor de um objeto e, caso contrário, não-instanciada. As regras são utilizadas para construir relações entre fatos, explicitando as dependências entre eles. Ao contrário dos fatos, que são incondicionais, as regras especificam coisas que podem ser verdadeiras se algumas condições forem satisfeitas. As regras possuem duas partes: o corpo, que define as condições e se encontra na parte direita da regra, e a cabeça, que define a conclusão, e se encontra na parte esquerda da regra. A cabeça e o corpo são separados pelo símbolo ":-", que é lido como "se". Uma regra sempre é terminada com um ponto final. 5 30/04/2013 Suponha a seguinte base de conhecimento: Continuação... 6 30/04/2013 Continuação... 7 30/04/2013 Seja a árvore genealógica mostrada abaixo... João Maria José Júlia Como seria uma base de fatos para representar essa árvore? Ana Íris Jorge 8 30/04/2013 Suponha a seguinte Base de Fatos Prolog: cargo(tecnico, rogerio). cargo(tecnico, ivone). cargo(engenheiro, daniel). cargo(engenheiro, isabel). cargo(engenheiro, oscar). cargo(engenheiro, tomas). cargo(engenheiro, ana). cargo(supervisor, luis). cargo(supervisor_chefe, sonia). cargo(secretaria_exec, laura). cargo(diretor, santiago). chefiado_por(tecnico, engenheiro). chefiado_por(engenheiro, supervisor). chefiado_por(analista, supervisor). chefiado_por(supervisor, supervisor_chefe). chefiado_por(supervisor_chefe, director). chefiado_por(secretaria_exec, director). Agora faça as seguintes perguntas à base de dados: ?- chefiado_por(tecnico, X), chefiado_por(X,Y). ?- chefiado_por(tecnico, X), cargo(X,ivone), cargo(Y,Z). ?- cargo(supervisor, X); cargo(supervisor, X). ?- cargo(J,P), (chefiado_por(J, supervisor_chefe); chefiado_por(J, supervisor)). ?- chefiado_por(P, director), not(cargo(P, carolina)). 9 30/04/2013 Considere a seguinte base de fatos: aluno(joao, paradigmas). aluno(maria, paradigmas). aluno(joel, lab2). aluno(joel, estruturas). frequenta(joao, feup). frequenta(maria, feup). frequenta(joel, ist). professor(carlos, paradigmas). professor(ana_paula, estruturas). professor(pedro, lab2). funcionario(pedro, ist). funcionario(ana_paula, feup). funcionario(carlos, feup). Escreva as seguintes regras em PROLOG: •Quem são os alunos do professor X? •Quem são as pessoas da universidade X? (alunos ou docentes) •Quem é colega de quem? Se aluno: é colega se for colega de disciplina ou colega de curso ou colega de universidade. Se professor: se for professor da mesma universidade. Considere a seguinte base de factos exemplo: comprou(joao, honda). ano(honda, 1997). comprou(joao, uno). ano(uno, 1998). valor(honda, 20000). valor(uno, 7000). Crie uma regra pode_vender onde o primeiro argumento é a pessoa, o segundo o carro e o terceiro é o ano actual (não especificar “homem” ou “carro” nas regras), onde a pessoa só pode vender o carro se o carro for comprado por ela nos últimos 10 anos e se seu valor for menor do que 10000 Euros. 10