E:\Plp 2009 2\Plp Aula11

1.305 visualizações

Publicada em

Paradigmas de Linguagens de Programacao
Aula #11
Prof. Ismar Frango

Publicada em: Educação
  • Seja o primeiro a comentar

E:\Plp 2009 2\Plp Aula11

  1. 1. Paradigmas de Linguagens de Programação Paradigma de Programação em Lógica Aula #11 (CopyLeft)2010 - Ismar Frango ismarfrango@gmail.com
  2. 2. Paradigma de Programação em Lógica (ou Declarativo) ?- ama (julieta,lomeu). :false.
  3. 3. a:-b Origens 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).
  4. 4. 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 Pro grammation en Log ique ) é 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), ECL i PS e , etc.
  5. 5. <ul><li>Prolog é baseado em cálculo de predicados de primeira ordem, ou seja, predicados compostos por: </li></ul><ul><ul><li>Variáveis (Sem tipagem explícita) </li></ul></ul><ul><ul><li>Funções e relações n-árias </li></ul></ul><ul><ul><li>Constantes (true e false) </li></ul></ul><ul><ul><li>Conectivos lógicos (limitados a  e  , ou seja, cláusulas de Horn ) /*Algumas outras linguagens lidam com lógica disjuntiva, como DLV .*/ </li></ul></ul>Qualquer proposição lógica do tipo: (p E q E R...) implica Z Prolog
  6. 6. (Breve) Embasamento teórico Basicamente, 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 .
  7. 7. 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

×