Vous êtes sur la page 1sur 4

PROLOG, Programando de Forma Lógica.

Rodrigo de Moraes
UNISINOS – Universidade do Vale dos Sinos
Av. Unisinos, 950, São Leopoldo, RS, Brasil
digao@sinos.net

Resumo As regras também podem ser combinadas, ou


seja, podemos ter duas condições para que a
Este artigo apresenta a linguagem de regra seja comprida que podem ser do tipo “e”
programação PROLOG, suas aplicações, ou do tipo “ou”.
conceitos e definições utilizando de vários
exemplos com o objetivo de introduzir a Exemplo:
linguagem e o paradigma em lógico de forma capital(X,Y) :- capital_estado(X,Y) ;
clara. capital_pais(X,Y).

1. Introdução X só pode ser capital de Y se X for


“capital_estado” de Y OU se X fora
“capital_pais” de Y, observe que a condição
Existem muitas linguagens de programação a OU é declarada pelo “;” entre as condições.
disposição de todos, cada uma obedece a um
paradigma, ou seja, cada linguagem tem uma uma_capital(X,Y) :- estado(X,Z) ,
maneira diferente de resolver um mesmo capital_estado(Z,Y).
problema, o que explica a diversidade de
paradigmas já que há problemas que seriam X só pode ser uma capital de Y se X for
resolvidos de maneira muito mais fácil, por “estado” de Y E se X fora “capital_estado” de
exemplo, no paradigma orientado a objetos do Y, sendo a condição E é declarada pela “,”[3].
que no paradigma imperativo.
O PROLOG é uma linguagem de Na programação do PROLOG o importante é
programação criada na França com o objetivo associar verdades a objetos ignorando os
de conciliar o uso da lógica como uma detalhes de modo a construir uma base dados e,
linguagem declarativa de representação do partindo de uma questão, possa consultá-la e
conhecimento com a representação obter uma resposta de forma lógica, ou seja, não
procedimental do conhecimento, baseado em importa o como às coisas acontecem e sim o que
programação lógica matemática, voltada para é cada objeto e duas relações (Figura 1).
inteligência artificial e lingüística
computacional (Paradigma Lógico). Sua
criação foi baseada no conceito da interpretação
procedimental das cláusulas de Horn, onde
existem regras e fatos para a obtenção lógica
dos resultados[1].

2. Conceitos
A estrutura utilizada para a programação em
PROLOG resume-se em objetos e relações entre
objetos, para isso são utilizadas declarações de
fatos, chamados também de predicados,  
afirmações que o programador impõe ao Figura 1 - PROLOG básico.
programa, declaradas com um ponto final no
fim da linha, definições de regras, ou seja, 2.1 Objetos
quando um fato depende de outro fato e
consulta sobre as relações entre objetos, Como se pode perceber, os objetos são as
declaradas com “:-” no meio da relação (Figura personagens dessa programação, são eles que
1)[2]. são alguma coisa ou que fazem alguma coisa,

 
que podem ser escritos de duas maneiras, em dada a base de dados:
formas de átomos ou de estruturas. /* *fatos **/
Na forma de átomos um objeto pode ainda fica-em(sao-paulo,brasil).
ser declarado de forma constante, ou seja, fica-em(paris,frança).
definida, como, brasil ou ‘Paulo’ ou ainda um fica-em(grenoble,frança).
número inteiro. Além da forma definida o nasceu-em(joao,sao-paulo).
objeto pode ser uma variável como por nasceu-em(jean,paris).
exemplo: País, porém o conceito “variável” não nasceu-em(louis,grenoble).
é o mesmo do que no paradigma imperativo ou /** regra* */
orientado a objetos, em PROLOG uma variável patria-de(X,Y):-nasceu-em(X,Z),fica-em(Z,Y).
apenas aponta, representa, um ou mais objetos
sem importar seu tipo com o objetivo de as seguintes consultas têm como respostas:
estabelecer relações entre objetos mais
facilmente (Figura 2) e não pode ser alteradas ?-patria-de(louis,P).
no decorrer da execução do programa. P=frança
Em formas de estruturas um objeto é ?-patria-de(joao,brasil).
declarado juntamente com suas definições, Yes
como foi o caso de pluto ser um cachorro
(Figura 1), porém elas podem estabelecer mais A regra estabelece que “patria-de” é uma
de um conceito de uma só vez (Figura 2). relação dependente das relações “nasceu-em” e
“fica-em”, e mostra como os itens da relação
“patria-de” se relacionam com os itens das
outras relações [4].

3. Busca e Recursividade

A busca feita para a obtenção dos objetivos é


dada a partir do conhecimento das regras
partindo então para os fatos de forma seqüencial
da esquerda para a direita sendo que em uma
conjunção de objetivos a busca é feita uma de
cada vez gerando um comportamento de
  retrocesso, ou seja, uma recursividade.
Figura 2 - Estruturas e Variáveis
Sendo assim, o PROLOG utiliza dois
2.2 Base de Dados e Questões mecanismos para o controle de pesquisa, um
para controle da pesquisa vertical, onde implica
a ordem com que os fatos e regras são colocados
A base de dados de uma programação feita
e outro para horizontal que se preocupa com a
em PROLOG é composta pelos fatos e regras
busca de valores para as substituições das
declarados que serão consultados quando o
variáveis de uma questão controlando o
programa for questionado.
processo de retrocesso durante a verificação de
Ao decorrer da execução do programa a base
um objetivo.
de dados pode ser alterada pelo usuário através
Além da busca de dados, a recursividade pó
de comandos, fazendo com que o programa
ser utilizada na resolução de problemas já que
aprenda ou despreze fatos e regras.
atua em cima de uma subestrutura contida
As questão imposta ao programa pode ser
dentro de uma estrutura idêntica repetidamente
aberta ou seja, pode-se utilizar variáveis para
até o termino das subestruturas necessitando de
uma resposta com n possibilidades perguntando
uma condição de término para que o programa
ao programa através de “;” (Figura 2) ou
não entre em um “loop” infinito, como é o casa
fechada, indicando exatamente a relação e os
da resolução de um fatorial onde necessita-se
objetos, obtendo uma resposta que será
ser feito varias vezes o mesmo processo
verdadeira ou falsa(Figura 1). Podemos também
mudando apenas os valores.
fazer uma pergunta com dois objetivo
A figura 3 mostra um exemplo da resolução
separando-os com “,” ou seja, no exemplo da
de fatorial onde se tem uma regra com duas
Figura 2, poderíamos perguntar de quem paulo e
variáveis, uma que necessita ser instanciada,
joao gostam, “?-gosta(joão,X),gosta(paulo,X)”
declarada, no caso o “X”, e uma livre, que seria
obtendo assim uma conjunção de objetivo.
a resposta, o “F” [2]. Através da recursividade é
o programa calcula o fatorial da variável X até
Exemplo geral:
que se obedeça o fato da primeira linha, ou seja,

 
nesse caso o fato seria a condição de para de ou inteiros), caractere ASCII, strings e dados
uma “while” em uma programação imperativa. formados.
As entradas e saídas de termos tem como
comandos o “read(termo)”, que lê um termo a
partir do dispositivo padrão de entrada, o
“write(termo)”, escreve no dispositivo padrão
de saída e o “display(termo)” que escreve um
termo em um forma prefixada.
Para que esse termo seja lido ou escrito de
forma correta é preciso obedecer algumas
Figura 3 - Recursividade
regras, como por exemplo quando é necessários
ler de um teclado, o “.” e o sinal de transmissão
marcam o fim do termo. Átomos que contenham
4. Predicados Pré-Definidos
predicados que iniciam em letra maiúscula,
contenham espaços ou quando uma variável não
Além dos predicados que podemos criar para aponta para nenhum objeto necessitam ser
a associação de objetos, a linguagem apresenta colocados entre apóstrofes e
outros predicados pré-definidos como para: A entrada e saída de caracteres se difere por
entrada e saída de dados, manipulação da base ler e ou escrever um caractere por vez,
de dados, controle de retrocesso, operações fornecendo meios mais naturais para esse tipo
aritméticas (veja alguns exemplos na Tabela 1) de linguagem, sendo utilizados os comandos:
e manipulação de termos (alguns exemplos “get0(caractere)”, que lê um caractere e verifica
Tabela 2) [4]. se o próximo caractere a ser lido é igual,
retornando sucesso ou falha, “get(caractere)”,
X>Y Sucede se X for maior que Y. simplesmente lê um caractere e “put(caractere)”,
X<Y Sucede se X for menor que Y. que escreve um caractere no dispositivo padrão
X >= Y Sucede se X for maior ou igual a Y. de sida.
X =< Y Sucede se X for menor ou igual a Y. Outros dois comandos utilizados para a
X =:= Sucede se X for igual a Y. manipulação de caracteres é o “ln” que faz com
Y que a próxima saída no dispositivo seja escrita
X =\= Sucede se X for diferente de Y. na próxima linha e o tab(número), para dar
Y tabulação a linha.
Tabela 1 – Predicados de operações aritméticas. Esses comandos também podem ser
utilizados na manipulação de dados que estão
var(X) Sucede se X é uma variável não em um arquivo, porém é preciso adicionar o
instanciada. apontador de “arquivo(AA)”, número associado
nonvar(X) Determina se X é uma variável ao arquivo pela linguagem, na sintaxe do
anônima. comando antes do termo ou caractere, por
atom(X) Sucede quando X está exemplo: “get(AA, caractere)” ou “read(AA,
representando um átomo Prolog. termo)”. Além dos comandos já mencionados,
integer(X) Sucede quando X está ainda temos o “open(AA,Arquivo,Modo)”, onde
representando um número o modo pode ser de somente leitura, somente
inteiro. escrita ou ambos, “colose(AA)”, fecha o
atomic(X) Sucede quando X está arquivo e o “create(AA,Arquivo)”, que cria e
representando um átomo ou um abre para gravação um arquivo.
inteiro.
X=Y Sucede se X é unificável com Y. 4.2 Manipulação da Base de Dados
X \= Y Sucede se X não é unificável
com Y. Estes predicados são utilizados para um
X == Y Sucede se X for equivalente a Y. melhor aproveitamento da base de dados. Eles
X \== Y Sucede se X não for equivalente permitem consultar um arquivo como base de
a Y. dados, gravar em um arquivo, listar os
Tabela 2 – Predicados de manipulação de termos predicados, editar regras e etc.

4.1 Entrada e Saída de Dados 5. Aplicação


Os predicados de entrada e saída de dados A aplicação do PROLOG, além da
são divididos em 4 grupos, entrada e saída de inteligência artificial, está diretamente ligada
termos PROLOG (átomos, variáveis, questões com lógica de busca em alguma base de dados,

 
como por exemplo a base de dados de clientes
de uma empresa, onde ficam registrados todas
as operações e características desse cliente. Com
a linguagem pode-se criar um programa que
busque clientes que tenham uma combinação de
dados que resulta em uma conclusão favorável a
empresa.
Como exemplo pode-se ter uma empresa que
vende vários tipos de aço e a maioria dos
clientes que compram aço do tipo1 compram
aço do tipo2. Em cima de uma lógica aplicada
em um programa em PROLOG pode-se fazer
um programa que busque na base de dados,
clientes que comprem só um dos tipos para que
a empresa possa oferecer o outro tipo de aço.

6. Conclusão
Podemos perceber que o PROLOG é uma
linguagem muito poderosa que dispõe de vários
recursos e que está sendo utilizada em
tecnologias importantes, porém isoladas, o que
explica o fato de não ser popular como as
linguagens convencionais.
Este artigo apresentou o mecanismo de
funcionamento da linguagem e alguns recursos
que ela oferece, mas deixa em aberto algumas
estruturas mais complexas visando o objetivo de
introduzir de forma clara e básica o PROLOG.

7. Referências Bibliográficas
[1]Disponível em:
http://pt.wikipedia.org/wiki/Prolog, aceso em
01/06/08.
[2]Disponível em:
http://www.din.uem.br/ia/ferramen/prolog,
acesso em 01/06/08.
[3] Disponível em:
http://inf.unisinos.br/~barbosa/grefe/temas/tema
9/exemplos.zip (pais.pl), acesso em 06/06/08.
[4]Disponível em:
http://inf.unisinos.br/~barbosa/grefe/temas/tema
9/prolog.pdf, acesso em 01/06/08.

Vous aimerez peut-être aussi