16
Laboratório de Programação III

Laboratório de Programação III - olaria.ucpel.tche.brolaria.ucpel.tche.br/venecian/lib/exe/fetch.php?media=prolog15.pdf · Considerações Iniciais Porque integrar? Emprego do

Embed Size (px)

Citation preview

Laboratório de Programação III

Sumário

Considerações Iniciais Modelo Arquitetural Outras Integrações Referências Bibliográficas

Considerações Iniciais

Porque integrar?

Emprego do mecanismo de busca e inferência de prolog em programas Java;

Utilização das vantagens do Java em programas prolog;

Ampliação do domínio dos termos prolog○ De Strings a objetos

Modelo Arquitetural Arquitetura em 1 camada

Um programa Prolog é transformado em um programa Java;

Arquitetura em 2 camadas Emulação de um motor Prolog emulado em Java;

Arquitetura em 3 ou mais camadas Programas Java fazem chamadas a uma camada

intermediária, que por sua vez invoca o motor Prolog; Programas Prolog fazem chamadas a uma camada

intermediária, que as repassam para a JVM.

Arquitetura em 1 camadaPré-compilação de regras prolog em classes Java, queimplementam o mecanismo de busca e inferência prolog.

Programa Prolog (Familia.pl)

avo(X,Z) :- pai(X,Y), pai(Y,Z).avo(X,Z) :- pai(X,Y), mae(Y,Z).avo(X,Z) :- mae(X,Y), pai(Y,Z).avo(X,Z) :- mae(X,Y), mae(Y,Z).mae(marta, joao).mae(maria, silvia).pai(jose, joao).pai(joao, marcos).mae(sandra, jose).pai(pedro, jose).

Arquitetura em 1 camadaPrograma Java (Familia.java)

public class Familia {

private static Set fatos = new HashSet();

static {

fatos.add(new Fato(“Mae”, “Marta”, “Joao”));

fatos.add(new Fato(“Mae”, “Maria”, “Silvia”));

fatos.add(new Fato(“Pai”, “Jose”, “Joao”));

. . .}

public static boolean Avo(String x, Sting y) {

return (Avo_1(x,y) || Avo_2(x,y) || Avo_3(x,y) || Avo_4(x,y));

}

private static boolean Avo_1(String x, String y) {

for (Iterator i = fatos.iterator(); i.hasNext(); ) {

Fato f = (Fato) i.next();

if (f.getPredicateName().equals(“Pai”) &&

g.getParam(1).equals(x) {

Fato aux = new Fato(“Pai”, f.getParam(2), y);

if (fatos.contains(aux)) return true;

}

}

return false;

}

. . .}

Arquitetura em 2 camadasBiblioteca de classes Java que implementam afuncionalidade do motor de Prolog;

Emulação do motor Prolog em Java: Exemplos:

○ jProlog Descrição: IDE para linguagem Prolog com interpretador. Link: http://sourceforge.net/projects/jprolog/

○ JavaLog Descrição: Uma biblioteca de classes Java. Link: http://sourceforge.net/projects/javalog/

Arquitetura em 2 camadas

Objeto + assert(String)+ checkGoal(String)+ findAll(String)

InterfaceProlog

Classes Java queimplementamo motor prolog

Arquitetura em 3 camadasBiblioteca de classes Java servem comoponte para algum sistema já existente:

Plugins para algum sistema integrado de outra linguagem(C, C#,...) com prolog.

Comunicação da JVM com o runtime prolog via sockets (ou similar).○ Ex.: InterProlog○ Link: http://www.declarativa.com/interprolog/

Arquitetura em 3 camadasInterProlog - integra Java e Prolog via comunicação

JVM via sockets ↔ Runtime Prolog

AplicaçõesJava

ProgramaProlog

ClassesInterProlog

JVM

PredicadosInterProlog

ExecutávelProlog

sockets

Redirecionam. I/O

Visão Geral da Arquitetura

Arquitetura em 3 camadas

Objetos Java

javaMessage(T,R,E,M,A,RA,N) :-socket_get(S,T,...),socket_put(S,T,M,...)...

InterfaceJava.pl

termoProlog :-javaMessage(...).

Rede

Predicado javaMessage ( . . .)usado para enviar mensagens a objetos Java.

Três formas:

• javaMessage(Objeto, Mensagem)• javaMessage(Objeto, Resultado, Mensagem)• javaMessage(Objeto, Resultado, Excecao,Mensagem, Argumentos, ArgumentosDepois)

Arquitetura em 3 Camadas

InterProlog – Exemplo de uma regra em Prologtrabalhando com javaMessage

distancia(Local1, Local2, Dist) :-

javaMessage(Local1, Dist, dist(Local2)).

Outras IntegraçõesOntologias(OWL) X Prolog

Disponível em http://arxiv.org/ftp/arxiv/papers/0711/0711.3419.pdf

Outras IntegraçõesProlog/Java

JPL – Interface bidirecional Prolog/Java Link: http://www.swi-prolog.org/packages/jpl/

JIProlog – Plataforma Java interpretação Prolog Link: http://www.brothersoft.com/mobile/jiprolog-2179.html

PrologCafe – Sistema de comunicação Prolog e Java Link: http://kaminari.scitec.kobe-u.ac.jp/PrologCafe/

Diversos: Link: http://kaminari.scitec.kobe-u.ac.jp/logic/jprolog.html

Referências Bibliográficas jProlog

http://people.cs.kuleuven.be/~bart.demoen/PrologInJava/

JavaLoghttp://azunino.sites.exa.unicen.edu.ar/research/projects/agent-development-tools

InterProloghttp://www.declarativa.com/interprolog