A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Elsa Carvalho 1 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Conceitos Prolog.

Apresentações semelhantes


Apresentação em tema: "Elsa Carvalho 1 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Conceitos Prolog."— Transcrição da apresentação:

1 Elsa Carvalho 1 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Conceitos Prolog = PROgramming in LOGic Origens: anos 70 Linguagem baseada na lógica de predicados de 1ª ordem, ou melhor, no seu subconjunto da lógica clausal (Horn). Ideias principais programa = conjunto de axiomas (cláusulas) computação = prova construtiva de uma afirmação a partir dos axiomas.

2 Elsa Carvalho 2 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Conceitos Motivação das cláusulas A :- A1,..., An. A se A1e... e An. ( A é verdadeiro se A1,..., An forem verdadeiros) Exemplo: passar a uma disciplina da LEI passar(D, X) :- disciplina(D, lei), inscrito(D,X), positiva(D,X). O Prolog é uma linguagem essencialmente declarativa, em que o problema a resolver é exposto através de cláusulas. Estão no entanto envolvidos igualmente aspectos procedimentais. A :- A1,..., An. Uma maneira de resolver A é resolver A1,..., An.

3 Elsa Carvalho 3 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe Termos em Prolog Termos Termos simples Termos compostos ConstantesVariáveis Átomos Números

4 Elsa Carvalho 4 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe Átomos Os átomos podem ser strings de letras, dígitos e o caracter _, começando com uma letra minúscula strings de caracteres especiais (, -, =, :), etc. Ex., ====>, ::== strings de caracteres entre plicas Ex. ‘Funchal’, ‘323-ABS’ Números Os números em Prolog podem ser inteiros ou reais (estes últimos não são muito utilizados). Ex.1, 1990, 0, -80, 3.14, -0.00334

5 Elsa Carvalho 5 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe Variáveis As variáveis são strings de letras, dígitos e o caracter _, começando com uma letra maiúscula ou com _. Ex. X, Resultado, List, _objecto1 Termos compostos Os termos compostos são formados a partir de uma função aplicada a um conjunto de argumentos. A função segue a sintaxe dos átomos e os argumentos são também termos. Ex.aluno(ricardo, departamento(universidade_madeira, matematica), 7003289)

6 Elsa Carvalho 6 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe Os termos compostos são o correspondente em Prolog das estruturas noutras linguagens de programação. A identificação de termos baseia-se em duas características: o nome e a aridade. O mesmo nome pode estar associado a diferentes funções. Ex. ponto(X,Y)corresponde à função ponto/2 ponto(X, Y, Z)corresponde à função ponto/3 Um termo diz-se chão se nele não intervêm quaisquer variáveis.

7 Elsa Carvalho 7 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe Cláusulas: Factos e Regras Uma cláusula é uma fórmula A :- A1,..., An quantificada universalmente constituída pela cabeça A e pelo corpo (A1,..., An), neste caso a conjunção de diversos objectivos. Os As são literais (predicados aplicados a termos). (Pontuação: as cláusulas são sempre sucedidas de um ponto ‘.’; a conjunção de objectivos expressa-se através da vírgula ‘,’) No caso do corpo ser vazio as cláusulas chamam-se usualmente factos, exprimindo relações universais.

8 Elsa Carvalho 8 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe pais e maes pai(antonio, rui).(o antónio é pai do rui) pai(antonio, sandra). mae(maria, rui).(a maria é mae do rui) mae(maria, sandra). feminino(maria). feminino(sandra). masculino(antonio). masculino(rui).

9 Elsa Carvalho 9 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe Quando o corpo não é vazio as cláusulas designam-se por regras, definindo relações à custa de outras relações. filhos e filhas filho(X,Y) :- pai(Y,X), masculino(X). filho(X,Y) :- mae(Y,X), masculino(X). filha(X,Y) :- pai(Y,X), feminino(X). filha(X,Y) :- mae(Y,X), feminino(X). ou

10 Elsa Carvalho 10 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe progenitor(X,Y) :- pai(X,Y). progenitor(X,Y) :- mae(X,Y). filho(X,Y) :- progenitor(Y,X), masculino(X). filha(X,Y) :- progenitor(Y,X), feminino(X). irmaos irmao(X,Y) :- masculino(X), progenitor(F, X), progenitor(F,Y), not(X==Y). irma(X,Y) :- feminino(X), progenitor(F, X), progenitor(F,Y), not(X==Y). Defina as relações de avo_m_f(avô ou avó); tio; tia; primo_m_f(primo ou prima).

11 Elsa Carvalho 11 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe Solução! avo_m_f(X,Y) :- progenitor(X,Z), progenitor(Z,Y). tio(X,Y) :- irmao(X,Z), progenitor(Z,Y). tia(X,Y) :- irma(X,Z), progenitor(Z,Y). primo_m_f(X,Y) :- pai(Z,Y), tio(Z,X). primo_m_f(X,Y) :- mae(Z,Y), tia(Z,X).

12 Elsa Carvalho 12 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe Um conjunto de regras com o mesmo predicado à cabeça é chamado um procedimento, tal como o que encontrámos no exemplo anterior para progenitor. Quando as variáveis apenas intervêm uma vez nas cláusulas podem ser substituídas pela variável anónima _.

13 Elsa Carvalho 13 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe Interrogações A forma de se obter informação de um programa Prolog é através de interrogações. Uma interrogação é uma fórmula cujas variáveis são quantificadas existencialmente e o seu objectivo é obter uma das seguintes respostas: não, se a fórmula não se verificar para todos os valores possíveis para as variáveis intervenientes. sim, se a fórmula for verdadeira para alguns valores das suas variáveis. Neste caso a resposta inclui as diferentes valorações das variáveis que tornam a fórmula verdadeira (através da utilização do símbolo ; )

14 Elsa Carvalho 14 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Para trabalhar em Prolog vai ser utilizado um interpretador ao qual serão fornecidos programas e sobre os quais podemos fazer perguntas. Depois de ‘abrir’ o interpretador SWI-Prolog aparece-nos o cursor: ?- ao qual podemos colocar uma interrogação: ?- interrogacao. No entanto teremos de ‘alimentar’ o interpretador com as relações que definimos num ficheiro de texto com extensão.pl (ou.swi): ?- consult(‘ficheiro’).ou [‘ficheiro’] O ficheiro ficheiro é lido e os ‘procedimentos’ definidos ficam disponíveis para possíveis interrogações. Utilização do SWI-Prolog

15 Elsa Carvalho 15 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Sintaxe Considere-se o programa anterior dos parentescos enriquecido com os seguintes factos: pai(alberto, antonio). pai(alberto, luisa). mae(emilia, antonio). mae(emilia, luisa). ?- pai(X, rui).(Quem é o pai do rui?) X= antonio yes ?- avo_m_f(alberto, X).(Quem são os netos de alberto?) X= rui; X= sandra; no

16 Elsa Carvalho 16 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Em Prolog o raciocínio é feito sob o princípio do mundo fechado, isto é, toda a informação que não é expressa directamente ou que não pode ser deduzida é considerada como falsa. Defina a árvore da sua família utilizando os predicados pai e mae e faça algumas experiências com perguntas sobre os seus parentes. Se desejar, pode definir mais predicados para expressar outras relações de parentesco. Sintaxe

17 Elsa Carvalho 17 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Existem 2 estilos básicos na utilização de programas lógicos: definir uma base de dados lógica manipular estruturas de dados Uma base de dados lógica é composta de um conjunto de factos e regras. Os factos definem relações universais. As regras definem relações mais complexas. Assim, um programa lógico composto por um conjunto de regras e factos, que tenham um formato restrito, podem expressar funcionalidades semelhantes às bases de dados relacionais. Podemos ver isso pelo exemplo de definições de parentesco que temos estado a definir. ‘Database programming’


Carregar ppt "Elsa Carvalho 1 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Conceitos Prolog."

Apresentações semelhantes


Anúncios Google