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

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

Jacques Robin, DI-UFPE www.di.ufpe.br/~jr Prolog: comparação com outras linguagens de programação e de representação do conhecimento Jacques Robin, DI-UFPE.

Apresentações semelhantes


Apresentação em tema: "Jacques Robin, DI-UFPE www.di.ufpe.br/~jr Prolog: comparação com outras linguagens de programação e de representação do conhecimento Jacques Robin, DI-UFPE."— Transcrição da apresentação:

1 Jacques Robin, DI-UFPE www.di.ufpe.br/~jr
Prolog: comparação com outras linguagens de programação e de representação do conhecimento Jacques Robin, DI-UFPE

2 Prolog 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

3 Prolog x sistemas de produção: poder 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)) -> X = pessoa(geber,Y), Z = dept(di,ufpe).

4 Prolog 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)

5 Outras 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

6 Prolog 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

7 Prolog 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 e0:tipoE0; var E:tipoE, S0:tipoS0, l1:tipo-I1, S1:tipoS1; 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).

8 Prolog 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

9 Prolog 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([H|T1],L,[H|T2]) :- append(T1,L,T2). ?- append([a,b],[c,d],R). R = [a,b,c,d]. Append relacional codifica 8 funções

10 Vários usos do mesmo predicado
verificador: ?- append([a,b],[c],[a,b,c]). -> yes. ?- append([a,b],[c],[a]). -> no. instanciador: ?- append([a,b],[c],R). -> R = [a,b,c]. ?- append(H,[c],[a,b,c]). -> H = [a,b]. resolvedor de restrições: ?- append(X,Y,[a,b,c]). -> X = [], Y = [a,b,c] ; -> X = [a], Y = [b,c] ... enumerador: ?- append(X,Y,Z). -> X = [], Y =[], Z = [] ; -> X = [_], Y = [], Z = [_] ...

11 Prolog 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

12 Prolog x programação OO: exemplo
Em OO: pt[subclass_of planobj; attrs[X inst_of int, Y inst_of int]; mets[right(Pt inst_of pt) {return self.X >= Pt.X}]] pt1[inst_of pt; attrs[X = 0, Y = 0]] pt2[inst_of pt; attrs[X = 1, Y =1]] ?- pt1.right(pt2) -> no. Em Prolog: pt(0,0). pt(1,1). planobj(pt(_,_)). right(pt(X1,_),pt(X2,_) :- X1 >= X2. ?- right(pt(0,0),pt(1,1)). -> no.

13 Programaçã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).

14 Programação por restrições: exemplo
integer(N). integer(S). sumto(0,0). sumto(N,S) :- 1 =< N, N =< S, sumto(N - 1, S - N). ?- S =< 3, sumto(N,S). (N = 0, S = 0), (N = 1, S = 1), (N = 2, S = 3). Propagação recursiva de restrições: 1: 1 =< N1 = N =< S1 = S =< 3 (N1,S1) in {(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)} 2: 1 =< N2 = N1 - 1 =< S2 = S1 - N1 =< 2 (N2,S2) in {(1,1),(1,2),(2,1),(2,2)} => (N1,S1) in {(2,3),(2,4),(3,4),(3,5)} N1 = 2, S1 = 3 => N2 = 1, S2 = 1

15 Prolog 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 =< 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

16 Prolog 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).

17 Linguagens 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


Carregar ppt "Jacques Robin, DI-UFPE www.di.ufpe.br/~jr Prolog: comparação com outras linguagens de programação e de representação do conhecimento Jacques Robin, DI-UFPE."

Apresentações semelhantes


Anúncios Google