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
Emprego do mecanismo de busca e inferência
Leia mais