e:\plp 2009 2\plp aula11
TRANSCRIPT
![Page 1: E:\Plp 2009 2\Plp Aula11](https://reader035.vdocument.in/reader035/viewer/2022081418/589ef21a1a28abe97f8b6a53/html5/thumbnails/1.jpg)
Paradigmas de Linguagens de Programação
Paradigma de Programação em LógicaAula #11(CopyLeft)2010 - Ismar Frango [email protected]
![Page 2: E:\Plp 2009 2\Plp Aula11](https://reader035.vdocument.in/reader035/viewer/2022081418/589ef21a1a28abe97f8b6a53/html5/thumbnails/2.jpg)
?- ama (julieta,lomeu).
:false.
Paradigma de Programação em Lógica (ou Declarativo)
![Page 3: E:\Plp 2009 2\Plp Aula11](https://reader035.vdocument.in/reader035/viewer/2022081418/589ef21a1a28abe97f8b6a53/html5/thumbnails/3.jpg)
a:-bOrigens
A programação em lógica inicia com a publicação do artigo de John Alan Robinson em 1965 pela ACM: "A Machine-Oriented Logic Based on the Resolution Principle"
Uma das primeiras linguagens a implementar os resultados de Robinson é Prolog, proposta por Alain Colmerauer e Phillipe Roussel em 1972 (Marseille).
![Page 4: E:\Plp 2009 2\Plp Aula11](https://reader035.vdocument.in/reader035/viewer/2022081418/589ef21a1a28abe97f8b6a53/html5/thumbnails/4.jpg)
O Que é o paradigma declarativo?Linguagens que seguem o paradigma declarativo são baseadas em programação em lógica (tradução direta de logic programming).
Prolog (do francês Programmation en Logique) é a linguagem-expoente desse paradigma, embora existam outras, como Gödel, Mercury, MUSE, etc.
Há um outro paradigma derivado deste, que é o paradigma de programação por propagação de restrições (CLP – Constraint Logic Programming), com as linguagens Oz, CLP(R), ECLiPSe, etc.
![Page 5: E:\Plp 2009 2\Plp Aula11](https://reader035.vdocument.in/reader035/viewer/2022081418/589ef21a1a28abe97f8b6a53/html5/thumbnails/5.jpg)
Qualquer proposição lógica do tipo:
(p E q E R...) implica Z
• Prolog é baseado em cálculo de predicados de primeira ordem, ou seja, predicados compostos por:– Variáveis (Sem tipagem explícita)– Funções e relações n-árias– Constantes (true e false)– Conectivos lógicos (limitados a e , ou seja,
cláusulas de Horn) /*Algumas outras linguagens lidam com lógica disjuntiva, como DLV.*/
Prolog
![Page 6: E:\Plp 2009 2\Plp Aula11](https://reader035.vdocument.in/reader035/viewer/2022081418/589ef21a1a28abe97f8b6a53/html5/thumbnails/6.jpg)
(Breve) Embasamento teóricoBasicamente, a programação em lógica corresponde a escrever códigos como:
goal :- subgoal_1, ..., subgoal_n.
Que significa que para provar goal, é suficiente provar de subgoal_1 até subgoal_n.
![Page 7: E:\Plp 2009 2\Plp Aula11](https://reader035.vdocument.in/reader035/viewer/2022081418/589ef21a1a28abe97f8b6a53/html5/thumbnails/7.jpg)
MODULE GCD.IMPORT Integers. PREDICATE Gcd : Integer * Integer * Integer.Gcd(i,j,d) <- CommonDivisor(i,j,d) & ~ SOME [e] (CommonDivisor(i,j,e) & e > d). PREDICATE CommonDivisor : Integer * Integer * Integer.CommonDivisor(i,j,d) <- IF (i = 0 \/ j = 0) THEN d = Max(Abs(i),Abs(j)) ELSE 1 =< d =< Min(Abs(i),Abs(j)) & i Mod d = 0 & j Mod d = 0.
Exemplo em Gödel