Douglas - Unisinos

Transcrição

Douglas - Unisinos
Prolog Cafe, Ferramenta para tradução de código da Linguagem
Prolog para Java
Douglas Dal Molin
Universidade do Vale do Rio dos Sinos
Unisinos, 950, São Leopoldo, RS, Brasil
[email protected]
Resumo
O paradigma de programação baseado em
lógica (Prolog) apresenta uma forma de
programação baseada em lógicas matemáticas e
algumas dessas lógicas muitas vezes são difíceis
de serem implementadas em um paradigma
orientado a objetos, como é o exemplo da
linguagem de programação Java.
Perante a essas dificuldades são criadas
algumas ferramentas que podem auxiliar no
desenvolvimento de softwares.
A ferramenta que será apresentada nesse artigo
é utilizada para traduzir os códigos que estão em
linguagem Prolog para Java, a ferramenta é
denominada Prolog Café.
1. Introdução
Os paradigmas de programação oferecem para
seus usuários uma grande gama de serviços para
que os programadores para que os mesmos
escolham qual paradigma irá suprir melhor as suas
necessidades, mas já existem ferramentas capazes
de juntar dois paradigmas completamente
diferentes como, por exemplo, o paradigma
orientado a objetos com a linguagem de
programação Java, e o paradigma em lógica com a
linguagem Prolog.
A eficiência dos sistemas Prolog em Java é um
tópico é um tópico que recebe bastante atenção e
está constantemente em discussão.
O paradigma orientado a objetos tem uma
definição muito forte dos tipos das variáveis, e
tem presente um conceito de heranças e
polimorfismo, em contraponto o paradigma lógico
é totalmente baseado em formulas matemáticas.
O jProlog 2, desenvolvido por B. Demoen e P.
Tarau foi o primeiro tradutor de Prolog em Java
desenvolvido, após este vieram outros tantos, mas
que não comparam-se como Prolog Cafe,
ferramenta a qual será discutida nesse artigo.
O trabalho segue a seguinte ordem: no
primeiro tópico será comentado um pouco sobre a
história e a linguagem Prolog, na seqüência será
comentado sobre o que é a ferramenta Prolog
Café, o que ela faz, e serão apresentados alguns
exemplos de projetos que utilizaram esse recurso
para desenvolverem seus estudos ou concluir
projetos.
2. Histórico da linguagem Prolog
A linguagem Prolog surgiu por volta dos anos
setenta, desenvolvida por Alain Colmerauer e
Robert Kowalski, a linguagem baseia-se em
lógicas matemáticas, limita-se a seguir uma
ordem, devidamente estabelecida em seu código,
para chegar a um resultado. Usa uma base de
dados de fatos e de relações lógicas (regras) para
chegar ao resultado final.
Como foi apresentado por Berz em seu artigo,
[4] o Prolog é baseado num subconjunto do
cálculo de predicados de primeira ordem, o que é
definido por cláusulas de Horn. A execução de um
programa em Prolog é efetivamente a prova de um
teorema por resolução de primeira ordem. Alguns
conceitos fundamentais são unificação, recursão, e
backtracking.
Prolog é utilizado para desenvolver sistemas ou
robôs que necessitam de inteligência artificial e
também em programas utilizados em softwares
comerciais que armazenam as informações do
cliente de compras anteriores e desta maneira
quando o comprador efetua uma nova compra o
sistema disponibiliza para o vendedor uma lista de
produtos que tem relação com o anterior para que
possam ser oferecidos para a pessoa que está
fazendo a compra.
Essa facilidade para o desenvolvimento de
soluções matemáticas despertou o interesse em
desenvolver uma ferramenta capaz de traduzir essa
linguagem para, por exemplo, Java.
3. Prolog Cafe
Prolog Cafe é uma das ferramentas que foram
criadas para traduzir a linguagem de programação
Prolog, para Java.
Essa ferramenta foi desenvolvida por Mutsunori
Banbara e Naoyuki Tamura, baseado em outro
programa chamado jProlog, mas já foi
comprovado que o Prolog Café é 2.2 vezes mais
rápido que o software em que se baseia.
A forma de tradução, conforme diz Banara, [1] é
feita código fonte de um superconjunto de Prolog,
chamado LLP (Linear Logic Programming
Language), para código fonte Java.
A principal diferença entre o jProlog aplicação
dos recursos é compilação. Na extensão de
recursos, fórmulas e encerramentos são
compilados e que consistem em uma referência de
código compilado com um conjunto de variáveis
para construção livres.
A ferramenta possui varias vantagens como, por
exemplo, portabilidade, pois roda em qualquer
plataforma Java, também é extensível para varias
bibliotecas como, Java3D, Java Spaces, JDBC,
entre outras.
O software permite ainda a programação em
rede, portanto é possível migrar códigos-fonte da
internet com o auxilio do Java Space.
Como pode se analisar no artigo do Caringi, [2] o
sistema O sistema possui duas versões do mesmo
tradutor, ambos possuem a mesma funcionalidade,
sendo que um é implementado utilizando Prolog e
outro utilizando Java, sendo esse último obtido
através da técnica de bootstraping, ou seja o
tradutor em Prolog é utilizado como entrada
para ele mesmo, obtenha como sa´ıda um tradutor
em Java. De acordo com informações retiradas do
trabalho de Caringi, [2] bootstraping consiste em
utilizar as facilidades oferecidas por uma
linguagem para compilar a si mesma.
A figura 1 apresenta os módulos do Prolog Cafe e
a figura 2 apresenta o módulo de execução do
sistema.
Figura 1 – Módulos do Prolog Cafe (Retirada do
trabalho do Caringi)
Figura 2 – Diagrama de execução (Retirada do
trabalho do Caringi)
3.1. Como Implementar
O run-time environment do Prolog Cafe
consiste em um conjunto de classes Java que dão
suporte para a execução do código traduzido. A
classe principal, Prolog.java, implementa varias
aplicações incluindo os registradores, a área de
dados e a rotina de unificação. Existem algumas
outras classes que trabalham em conjunto,
oferecendo, por exemplo, estruturas para o
gerenciamento do backtracking. É interessante
observar que o mecanismo de funcionamento das
classes é inspirado basicamente na WAM.
Para cada tipo de termo Prolog, existe uma
classe Java equivalente, a qual é uma sub-classe da
classe abstrata Term:
A classe VariableTerm, cria um objeto
representando uma variável lógica, a IntegerTerm,
representa os valores do tipo inteiro, a
SymbolTerm, cria objetos representando átomos, a
ListTerm, modela as listas Prolog, a
StructureTerm, cria um objeto representando um
termo composto, um termo composto consiste em
um functor e uma seqüência de um ou mais termos
chamados argumentos.
De acordo com BANBARA, [1] a definição da
classe abstrata Term torna mais simples a
manipulação em Java de vetores de termos, uma
vez que, em um vetor do tipo Term, pode ser
colocado qualquer objeto que seja uma sub-classe
dele.
4. Exemplos
Muitos pesquisadores utilizam a ferramenta
para auxiliar no desenvolvimento de seus projetos
como é o exemplo que será mostrado a seguir de
um projeto sobre Holo paradigma desenvolvido
pelo professor Doutor Jorge Luis Vitória Barbosa
da Unisinos que utilizou o Prolog Cafe para
traduzir o código da Série de Fibonacci que estava
em Prolog e foi traduzido para Java.
A figura 3 representa como é do programa
desenvolvido e qual parte deste código é traduzida
pelo Prolog Cafe.
Tabela 1 – taxas de tradução
5. Conclusão
Figura 3 – tradução da seqüência de Fibonacci
Pode-se analisar que na segunda parte do
processo utiliza-se o tradutor para interpretar a
série de Fibonacci para após enviar ao compilador
Java que logo após será executado pela JVM (Java
Virtual Machine).
Dentro do mesmo projeto foi criada uma tabela
com as informações das traduções feitas do
hanoi.Holo, fibo.holo, lists.holo e family.holo, que
pode ser observada na tabela 1.
Após realizar a pesquisa é possível concluir
que a ferramenta de tradução Prolog Café é muito
útil para desenvolvimento de projetos de pesquisa,
ou para softwares de uso diário.
Pelo fato da linguagem de programação Prolog
ser muito eficiente para resolver problemas que
necessitem de lógicas matemáticas, caso o
programador tenha habilidades para desenvolver
sistemas em paradigma lógico, fica muito simples
para desenvolver todo o software em Java e
apenas a parte matemática será criada em Prolog, e
que conseguinte pode ser traduzida para Java com
o auxilio do Prolog Cafe traduzir-lo.
6.
Referências
[1] Mutsunori Banbara e Naoyuki Tamura - Translating
a Linear Logic Programming Language into Java
[2] Augusto Mecking Caringi - PROJAVA: Um
Tradutor de Prolog para Java
[3] Jorge Luis Vitória Barbosa - Java como Linguagem
Intermediária para Compiladores Multiparadigma
[4] Everton Luís Berz - Linguagem Prolog

Documentos relacionados

Uma Proposta para Integração de Java e Prolog

Uma Proposta para Integração de Java e Prolog  Emprego do mecanismo de busca e inferência

Leia mais