O código abaixo é bastante comum no aprendizado da linguagem
Prolog. Ele aborda algumas relações familiares. As linhas iniciadas pela palavra "pai", "mae" e "avo" mostram predicados. Os predicados simbolizam as relações.
Os predicados abaixo recebem dois parâmetros. No exemplo abaixo utilizamos a notação:
- pai (A, B), quando o pai de A é B.
- mae (A, B), quando a mãe de A é B.
- avo (X, Y), quando o avô de X é Y.
O predicado avo foi criado com as definições de pai e mae.
A linha abaixo pode ser lida como: Avô de X é Y se Pai de X é Z e Pai de Z é Y.
avo(X, Y) :- pai(X,Z),pai(Z,Y).
Parâmetros iniciados com letra minúscula são chamados de constantes (ex: pessoaA, pessoaB, pessoaC) são todos constantes.
Parâmetros iniciados com letra maiúscula (ex: X, Y, Z) são variáveis. Através das variáveis o prolog buscará soluções.
A busca realizada pelo prolog será feita através dos fatos e regras existentes. Os fatos são aqueles predicados que possuem apenas constantes. Regras possuem variáveis.
% Fatos %
pai(pessoaA, pessoaB).
pai(pessoaB, pessoaC).
pai(pessoaD, pessoaE).
mae(pessoaA, pessoaD).
% Regras %
avo(X, Y) :- pai(X,Z),pai(Z,Y).
avo(X, Y) :- mae(X,Z),pai(Z,Y).
Salve as linhas de código acima em um arquivo chamado artigo01.pl. Em seguida, execute o
gprolog com o comando:
gprolog
A saída será:
Dados do software
| ?-
Digite então:
consult('LocalizacaoDoArquivo/artigo01.pl').
ou vá até o diretório de localização do arquivo antes de executar o comando gprolog.
Depois, basta digitar:
consult('artigo01.pl').
Para ver o funcionamento do programa será necessário realizar consultas. As consultas em prolog podem ser feitas de diversas maneiras. Por exemplo:
pai(pessoaA, X).
Resultaria em:
X = pessoaB, já que esse foi o fato passado ao compilador.
avo(X, Y).
Retornaria os resultados em que foi comprovado pela busca do prolog que "avo de X é Y". No caso, os dados retornados seriam:
(avô paterno)
X = pessoaC,
Y = pessoaA
; (ou)
(avo materno)
X = pessoaA
Y = pessoaE
Outras consultas resultam em Yes ou No. Por exemplo:
pai(pessoaA, pessoaB).
Como isso é um fato, a resposta seria Yes.
Com isso, concluímos o primeiro exemplo.
Conclusão e agradecimentos
É interessante programar em diferentes paradigmas, creio que agrega bastante na bagagem dos programadores. Verdade que sempre buscamos os algoritmos como base para a programação, mas com os diferentes paradigmas as maneiras de se alcançar a solução podem variar bastante, forçando o programador a pensar de maneiras diferentes.
Foi uma experiência boa ter colocado este artigo aqui, já que foi meu primeiro. Aprendi fazendo o artigo e espero que tenha agregado a quem for utilizá-lo também.
Por hoje é só.
Espero que tenham gostado.