Title: Prolog: compara
1Prolog comparação com outras linguagens de
programação e de representação do conhecimento
- Jacques Robin, DI-UFPE
- www.di.ufpe.br/jr
2Prolog x sistemas de produção controle
- Raciocino dirigido pelo objetivo (e não pelos
dados) - Regras encadeada para trás (e não para frente)
- Busca em de cima para baixo e em profundidade na
árvore de prova (e não de baixo para cima e em
largura) - Sempre dispara 1a regra aplicável encontrada (ie,
sem resolução de conflitos) - Backtracking quando 1a regra leva a uma falha
3Prolog x sistemas de produçãopoder expressivo
- Fatos universais (e não apenas instanciados)
- ex ancestral(X,adão).
- Unificação (e não apenas matching)
- bidirecional
- variáveis lógicas podem ser instanciadas com
termos compostos (e não apenas atómicos) - ex ?- prof(X,disc(ia,dept(di,ufpe)))
- prof(pessoa(geber,Y),disc(ia,Z))
- -gt X pessoa(geber,Y), Z
dept(di,ufpe).
4Prolog x resolução em L1
- Restrições de Prolog com respeito a L1
- apenas cláusulas de Horn
- sem igualdade semântica
- unificação sem verificação de ocorrência
- Extensões de Prolog com respeito a L1
- predicados (e não apenas funções) como
construtores de termos - predicados built-in de segunda ordem
- Outras diferenças com respeito a L1
- negação por falha (limitada mas não monótona)
5Outras linguagens de PL
- PL com semântica declarativa estendida
- negação explícita
- conclusões disjuntivas
- igualdade semântica (Eqlog)
- PL com semântica procedimental estendida
- backtracking inteligente
- controle de busca por meta-regras (MRS, Metalog)
- PL para SGBD dedutivo (Datalog)
- encadeamento para frente
- busca em aprofundamento iterativo
- otimização de acesso à memória secundária
- resolução completa e correta
6Prolog x programação imperativa 1
- Interativo
- compilação transparente integrada na
interpretação - rodar programa consultar um BD
- Gerenciamento automático da memória
- Mecanismo único de manipulação de dados --
unificação de termos lógicos -- implementando - atribuição de valor
- passagem de parâmetros
- alocação de estruturas
- leitura e escritura em campos de estruturas
7Prolog x programação imperativa 2
- Estrutura de dados única termo Prolog
- variáveis lógicas sem tipo estático
- Controle implícito built-in na estrategia de
resolução, ex Em programação imperativa - procedure c(E)
- const e0tipoE0
- var EtipoE, S0tipoS0, l1tipo-I1, S1tipoS1
- do if E e0 then do S0 call p0(e0) return
S0 end - else do I1 call p1(E) S1 call
p2(E,l1) return S1 end - end
- Em Prolog
- c(e0,S0) - p0(e0,S0).
- c(E,S1) - p1(E,I1), p2(E,I1,S1).
8Prolog x programação funcional 1
- Matematicamente, predicado relação
- não-determinismo
- respostas múltiplas (disponíveis por
backtracking), - unificação e busca built-in,
- livra o programador da implementação do controle
- bi-direcionalidade
- cada argumento pode ser entrada ou saída,
dependendo do contexto de chamada, - única definição para usos diferentes
verificador, instanciador, resolvedor de
restrições, enumerador. - integração imediata com BD relacional
9Prolog x programação funcional 2
- Append em Lisp
- (defun append(L1,L2)
- (cond ((null L1) L2))
- (T (cons (first L1) (append (rest
L1) L2)))))) - ?- append(a,b,c,d)
- a,b,c,d
- Append em Prolog
- append(,L,L).
- append(HT1,L,HT2) - append(T1,L,T2).
- ?- append(a,b,c,d,R).
- R a,b,c,d.
- Append relacional codifica 8 funções
10Vários usos do mesmo predicado
- verificador
- ?- append(a,b,c,a,b,c). -gt yes.
- ?- append(a,b,c,a). -gt no.
- instanciador
- ?- append(a,b,c,R). -gt R a,b,c.
- ?- append(H,c,a,b,c). -gt H a,b.
- resolvedor de restrições
- ?- append(X,Y,a,b,c). -gt X , Y a,b,c
- -gt X a,
Y b,c ... - enumerador
- ?- append(X,Y,Z). -gt X , Y , Z
- -gt X _, Y ,
Z _ ...
11Prolog x programação OO
- Funcionalidades built-in
- unificação e busca
- - tipos, herânça e encapsulação
- Ontologicalmente
- Entidade Atómica (EA) em OO, valor de tipo
built-in - em Prolog,
átomo (argumento ou predicado) - Entidade Composta (EC) em OO, objeto
- em Prolog,
fato - Relação simples entre EC e EA em OO, atributo de
tipo built-in -
em Prolog, posição em um predicado - Relação simples entre ECs em OO, atributo de
tipo objeto - em
Prolog, predicado - Relação complexa entre entidades em OO, método
-
em Prolog, conjunto de regras
12Prolog x programação OO exemplo
- Em OO
- ptsubclass_of planobj
- attrsX inst_of int, Y inst_of int
- metsright(Pt inst_of pt) return self.X gt
Pt.X - pt1inst_of pt attrsX 0, Y 0
- pt2inst_of pt attrsX 1, Y 1
- ?- pt1.right(pt2) -gt no.
- Em Prolog
- pt(0,0).
- pt(1,1).
- planobj(pt(_,_)).
- right(pt(X1,_),pt(X2,_) - X1 gt X2.
- ?- right(pt(0,0),pt(1,1)). -gt no.
13Programação por restrições
- Programar declarar restrições sobre os valores
v1, ... vn, de um conjunto de variáveis V1,
..., Vn - o dominio Di associado a cada variável Vi
- equações e inequações Pj(Vp, ..., Vq) ligando-as
- Executar programa
- fazer uma consulta sobre a compatibilidade de
restrições de entrada Pk(Vr, ..., Vs) com as
restrições do programa - recuperar em saída todos os valores (v11, ... ,
vn1) ... (v1l, ..., vnl) de (V1, ... , Vn) que
satisfazem ambos Pj(Vp, ... , Vq) e
Pk(Vr, ..., Vs).
14Programação por restrições exemplo
- integer(N).
- integer(S).
- sumto(0,0).
- sumto(N,S) - 1 lt N, N lt S, sumto(N - 1, S -
N). - ?- S lt 3, sumto(N,S).
- (N 0, S 0), (N 1, S 1), (N 2, S 3).
- Propagação recursiva de restrições
- 1 1 lt N1 N lt S1 S lt 3
- (N1,S1) in (1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3
,1),(3,2),(3,3) - 2 1 lt N2 N1 - 1 lt S2 S1 - N1 lt 2
- (N2,S2) in (1,1),(1,2),(2,1),(2,2) gt (N1,S1)
in (2,3),(2,4),(3,4),(3,5) - N1 2, S1 3 gt N2 1, S2 1
15Prolog x programação por restrições
- Em Prolog
- predicados aritméticos não podem ser chamados
como resolvedores de restrições - mas apenas como verificadores
- a consulta S lt 3, sumto(N,S) gera erro por
chamar predicados aritméticos com termos não
instanciados - Prolog pode ser visto como
- uma linguagem de programação por restrição
- cujo único operador é a unificação
- cujo domínio é o conjunto de arvores finitas que
representam os termos Prolog
16Prolog como restrições exemplo
- prof(X,disc(ia,dept(di,ufpe)))
- ?- prof(pessoa(geber,Y),disc(ia,Z))
- 1 prof prof, 2 2
- 2 X pessoa(geber,Y), disc disc, 2 2,
- 3 ia ia, dept(di,ufpe) Z
- 4 fundo das arvores atingindas
- devolve as equações não trivais
- X pessoa(geber,Y),
- Z dept(di,ufpe).
17Linguagens de PL multiparadigma
- PL concorrente, paralela (Concurrent Prolog,
Parlog) - PL funcional (Lambda-Prolog, LeFun)
- PL OO (Logtalk, Objlog, Login, FLORID)
- PL por restrições, ie, Prolog (in)equações
- aritméticas (CLP(R), CHIP, Prolog3)
- de tipos (Login)
- booleanas (CHIP, Prolog3)
- PL para Internet, predicados built-in para
- protocolos http, ftp, mail, news, etc.
- parsing de páginas HTML para termos Prolog
- PiLLoW, Logicweb