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

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

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

Apresentações semelhantes


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

1 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 "Prolog: comparação com outras linguagens de programação e de representação do conhecimento Jacques Robin, DI-UFPE www.di.ufpe.br/~jr."

Apresentações semelhantes


Anúncios Google