29 Sep

Continuando com nossa série sobre linguagens de programação, vou falar um pouco sobre um linguagem um tanto estranha, mas muito poderosa: Prolog. Ao contrário das outras linguagens já abordadas (vide acima), Prolog não é uma linguagem imperativa, na qual você “dá ordens” para o computador, mas sim uma linguagem declarativa, na qual você “diz” para o computador como é o problema que seu programa deve resolver.
A princípio, isso pode parecer mágica, mas existe toda uma teoria de lógica por trás. Um programa em Prolog é, na verdade, um conjunto de fatos, predicados e regras de derivação de lógica. Uma execução de um programa é, na verdade, uma prova de um teorema, iniciada por uma consulta. Confuso? Vamos dar um exemplo:
pai(joao, jose).
pai(jose, manoel).
avo(Avo, Neto) :-
pai(Avo, Filho),
pai(Filho, Neto).
O trecho de código acima define dois fatos: “joao” é pai de “jose” e “jose” é pai de “manoel”. Também define uma regra de derivação: a regra avo. A regra diz: um Avo é avô de um Neto se o Avo é pai de um Filho e (a vírgula faz o papel do conectivo lógico “e”) esse mesmo Filho é pai de um Neto. Note as letras maiúsculas no começo dos nomes; variáveis, em Prolog, devem começar com letra maiúscula (se não começar com letra maiúscula, ou é regra, ou é predicado ou é símbolo). Note, também, o ponto final no fim de cada fato e da regra: outro requisito da sintaxe de Prolog.
Agora, suponha que você queira saber quem são os netos de “joao”. Para isso, faz-se uma consulta, que é da seguinte forma:
?- avo(joao, X).
Note que passamos uma variável para a consulta (o X). Quando fazemos isso, o Prolog procura por todos os símbolos que satisfazem a consulta. Esse é o maior poder do Prolog: a busca. Toda consulta é uma busca numa árvore de possíveis soluções para a satisfação da consulta (ou para a prova do teorema).
Esse conceito de busca num espaço de estados vem das pesquisas em inteligência artificial, e é uma idéia fundamental na área. Aliás, justamente por isso, Prolog é bastante utilizado em aplicações de inteligência artificial. Graças a busca, programas em Prolog tendem a ser bastante compactos.
É possível, também, fazer um paralelo com bancos de dados. Os fatos podem ser vistos como entradas em tabelas; as regras de derivação, como consultas, só que mais genéricas, pois não restringem os valores buscados (apenas definem a relação entre os dados de entrada e os resultados esperados).
Outro recurso interessante da linguagem é o suporte simples a gramáticas de cláusulas definidas (uma tradução livre de DCG - definite clause grammar). Explicando sucintamente, o Prolog oferece um modo fácil de descrever uma sintaxe, permitindo escrever código para análise sintática simplesmente descrevendo a sintaxe.
Para utilizar a linguagem, é necessário um interpretador. Recomendo o SWI-Prolog. É possível ligar o interpretador com programas em outras linguagens, mas nunca fiz isso.
Apesar de tudo isso, Prolog também tem seus problemas. Além de ser necessário um pouco mais de cuidado para não escrever programas extremamente ineficientes, leva um tempo para se acostumar a pensar do modo necessário para programar declarativamente. Prolog é uma linguagem boa para se escrever alguns tipos de algoritmos, mas para a maioria das aplicações não é tão boa. A modularização também é um ponto fraco da linguagem (e da teoria da lógica, em geral). Talvez por esses problemas, a linguagem aparece como “acadêmica” na Wikipédia.
Resumindo, Prolog é uma linguagem interessante de se aprender; estimula um tipo de raciocínio diferente, mais lógico e mais recursivo. Também facilita muito a vida em alguns tipos de problemas.
Nota: a imagem do post remete ao problema de colorir mapas utilizando um número fixo de cores, um problema bastante difícil, mas que pode ser facilmente programado em Prolog. A imagem foi retirada deste site, que fala mais sobre o problema.
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
Email This Post
9 Responses for "Linguagens de programação - Prolog"
Muito interessante!
Eu nunca aprendi prolog devido a um professor muito ruim de Inteligência Artificial na faculdade, que não ensinou nada e não exigiu muito também. Passou batido, hehehe.
Mas é muito legal mesmo! E não acho que seja algo somente acadêmico, ela serve para solucionar de maneira muito elegante problemas complexos de Inteligência Artificial e buscas em geral.
Ótimo post!
Legal a ilustração. Eu demorei um pouco para acreditar que só são preciso 4 cores para se pintar QUALQUER mapa, quando o prof. do primeiro semestre disse isso. Dá um nó na cabeça pensar nisso, ahahaha!
Olá, Douglas.
Obrigado pelos elogios! :)
Disse que Prolog é mais acadêmico porque não tenho conhecimento de aplicações comerciais que usam Prolog, mesmo aplicações de Inteligência Artificial. Mas é bastante provável que tenham, sim, aplicações comerciais em Prolog. Só não são comuns.
Bastante curioso o problema da coloração dos mapas, não? É muito interessante esse teorema. Nunca vi a prova…
Obrigado pela visita e pelo comentário!
Olá,
Eu particularmente não gosto muito de Prolog, apesar de ter usado muito pouco. A questão é a busca ser por padrão em profundidade e o que acaba ocorrendo é que é muito difícil fazer coisas muito fáceis.
Sobre o teorema das 4 cores, eu apenas vi a prova para 5 cores. Não é muito complicado, mas precisa de umas definições de grafo e perceber que o problema é relacionado com coloração de um grafo planar.
Até onde eu sei, não existe prova “limpa” para 4 cores. Eles conseguem provar exceto para uma família finita de grafos, onde foi provado por força bruta computacional que ainda é válido.
Olá, Rafael.
Realmente, a busca por profundidade às vezes tem seus problemas na hora de programar em Prolog. Mas, como assim fica muito difícil fazer coisas muito fáceis?
Li um pouco mais sobre o teorema das quatro cores e, pelo que encontrei, eles provaram para uma família finita de grafos computacionalmente e, assim, provaram para todos os grafos. Não é exatamente por força bruta.
Uma outra poderosa linguagem de programação voltada a inteligencia artificial é ADA.
Link com um tutorial: http://www.infres.enst.fr/~pautet/Ada95/a95list.htm
Olá, cleber
Nossa! ADA!? Bom, até agora só tinha ouvido falar em ADA. Dei uma lida em alguns textos (inclusive no começo desse tutorial que você passou) e parece uma linguagem interessante. Vou dar uma estudada nela. Valeu pela dica!
Obrigado pelo comentário!
Vale lembrar que SWI-Prolog tem uma extensão para GUI, chamada de XPCE. Vale a olhada.
Não sei se programam comercialmente com Prolog, mas essa GUI dá um aajuda danada, hehehe…
[...] Linguagens de programação - Prolog [...]
Olá, Filipe
Bem lembrado! O XPCE é muito bom também para entender o funcionamento da linguagem. O debugger visual dele é uma ferramenta bem legal.
Obrigado pelo comentário!
Leave a reply