logo

Programas Prólogo

Usar os predicados integrados, a sequência de metas ou especificar uma meta no prompt do sistema teria pouco valor por si só. Para escrever um programa Prolog, primeiro o usuário deve escrever um programa escrito na linguagem Prolog, carregar esse programa e então especificar uma sequência de um ou mais objetivos no prompt.

Para criar um programa em Prolog, a maneira mais simples é digitá-lo no editor de texto e salvá-lo como um arquivo de texto como prolog1.pl .

O exemplo a seguir mostra um programa simples de Prolog. O programa contém três componentes, conhecidos como cláusulas. Cada cláusula é encerrada com um ponto final.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

Usando o predicado integrado ' consultar' , o programa acima pode ser carregado no sistema Prolog.

?-consultar('prolog1.pl').

Isso mostra que o arquivo prolog1.pl existe e que o programa prolog está sistemicamente correto, o que significa que possui cláusulas válidas, o objetivo será bem-sucedido e, para confirmar se o programa foi lido corretamente, ele produz uma ou mais linhas de saída. por exemplo.,

?-
# 0,00 segundos para consultar prolog1.pl
?-

tabela de reação

A alternativa de 'consultar' é 'Carregar', que existirá na opção de menu caso o sistema Prolog possua interface gráfica de usuário.

Quando o programa é carregado, a cláusula será colocada em uma área de armazenamento, e essa área de armazenamento é conhecida como banco de dados Prolog. Em resposta ao prompt do sistema, especifique uma sequência de objetivos e isso fará com que o Prolog procure e use as cláusulas necessárias para avaliar os objetivos.

Terminologia

No programa a seguir, três linhas mostram as cláusulas.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

Usando o ponto final, cada cláusula será encerrada. Os programas Prolog possuem uma sequência de cláusulas. Fatos ou regras são descritos por estas cláusulas.

Exemplo de fatos é cachorro (rottweiler) e gato (pequenino) . Eles querem dizer que ' rottweiler é um cachorro' e ' pequenininho é um gato'.

Cachorro é chamado de predicado. Dog contém um argumento. Palavra ' rottweiler' entre colchetes ( ). Rottweiler é chamado de átomo.

O exemplo de regra é a linha final do programa.

 animal(A) :- dog(A). 

O caractere dois pontos (:-) será lido como 'if'. Aqui A é uma variável e representa qualquer valor. Naturalmente, a regra pode ser lida como “Se A é um animal, então A é um cachorro”.

A cláusula acima mostra que o rottweiler é um animal. Tal dedução também pode ser feita pelo Prolog:

?- animal(rottweiler).
sim

Para implicar isso pequenininho é um animal, não há nenhuma evidência disso.

?- animal(pequenino).
Não

Mais terminologia

Avaliar um termo de meta determina se ele é satisfeito ou não. Isso também significa que a meta é avaliada como verdadeira ou falsa.

Observe que quando um usuário insere uma meta, às vezes ela pode ser interpretada como um comando. Por exemplo,

?-parar. 'É usado para sair do sistema Prolog.'

Às vezes, pode ser considerado uma pergunta como,

?- animal(rottweiler). & 'O rottweiler é um animal?'

O programa a seguir mostra outro exemplo sobre animais. É composto por oito cláusulas. O comentário é mostrado por todo o texto entre /* e */.

 /* Another Program of Animal */ Dog(rottweiler). cat(sphynx). dog(poodle). dog(bulldog). cat(bengal). dog(dobermann). cat(himalayan). cat(singapura). /* This Prolog program consists of various clauses. It is always terminated using the full stop.*/ 

O predicado cão e o predicado gato têm quatro cláusulas. Suponha que em um arquivo de texto 'animal.pl', o programa foi salvo e a saída é gerada ao carregar o programa e no prompt do sistema, estamos inserindo uma sequência de objetivos como segue:

?- consultar('animais1.pl'). Alerta do sistema
# 0,01 segundos para consultar Animals.pl Animals.pl carregado usando a consulta

?- cachorro(rottweiler).
sim

?- cachorro (boxeador).
Não

?- cachorro(A).
A = pausa do rottweiler - a tecla de retorno é pressionada pelo usuário

?- cachorro(B).
B = rottweiler; pausas? usuário pressiona;
B = poodle; pausas? usuário pressiona;
B = buldogue; pausas? usuário pressiona;
B = dobermann Sem pausa? Irá para a próxima linha

?- gato(A). A = esfinge; pausa ? prensas do usuário;
A = Bengala faz uma pausa? usuário pressiona retornar

?- ouvindo(cachorro). Ele listará todas as cláusulas que definem o predicado dog

/* cachorro/1 */

cachorro(rottweiler).
cachorro(caniche).
cachorro(buldogue).
cachorro(dobermann).
sim
?-

Neste exemplo, vários novos recursos do Prolog são introduzidos. A consulta é a seguinte:

?- cachorro(A).

Significa que encontre o valor de A e será o nome do cachorro. A resposta do Prolog é a seguinte:

A = rottweiler

Outras respostas possíveis de A são as seguintes, poodle, bulldog, dobermann. Isso causará uma pausa no Prolog e, por causa disso, teremos que esperar que o usuário pressione a tecla 'return' antes de exibir o prompt do sistema ?-.

Podemos inserir a próxima consulta da seguinte forma:

?- cachorro(B).

Esta consulta é a mesma de antes. A consulta acima significa que 'encontre o valor de B e será o nome de um cachorro'. A resposta do Prolog é a seguinte:

B = rottweiler

cidades na Austrália

O Prolog irá pausar novamente. Desta vez, a tecla ponto-e-vírgula (;) é pressionada pelo usuário. Agora o Prolog encontrará um valor alternativo de B que satisfaça o objetivo dog(B). Ele responderá da seguinte forma:

B = poodle

O Prolog irá pausar novamente. A tecla ponto e vírgula (;) é novamente pressionada pelo usuário. Prolog produz uma solução adicional como segue:

B = buldogue

O Prolog irá pausar novamente. A tecla ponto e vírgula (;) é novamente pressionada pelo usuário. Prolog produz uma solução adicional como segue:

B = dobermann

O Prolog reconhece que não há mais solução disponível não pausando, mas sim o prompt do sistema ?- indo imediatamente para a saída.

Um novo predicado integrado é introduzido neste exemplo. Especificando o objetivo

?- listagem (cachorro)

No objetivo acima, o Prolog listará todas as quatro cláusulas que definem o predicado dog. Eles serão definidos na mesma ordem em que foram carregados no banco de dados.

O uso de variáveis ​​na consulta é mostrado no exemplo a seguir. A sequência do objetivo é a seguinte:

?-gato(A),cachorro(B).

Isso nos dará todas as combinações possíveis de gato e cachorro.

?-gato(A),cachorro(B).
A = esfinge,
B = rottweiler;

A = esfinge,
B = poodle;

atalhos de teclado linux

A = esfinge,
B = buldogue;

A = esfinge,
B = dobermann;

etc.

Em contraste, a sequência do objetivo é a seguinte:

?-gato(A), cachorro(A).

Isso fornecerá todos os animais que são um gato e um cachorro (no banco de dados não existe tal animal). Aqui A é 'qualquer valor' em cat(A) e dog(A), mas ambos devem ter o mesmo valor.

?-gato(A),cachorro(A).
Não