Laboratório de Programação III -...
Transcript of Laboratório de Programação III -...
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 nos fundamentos WS
Disponível em http://ftp.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-287/paper_1.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