Prolog/Introdução ao Prolog: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Albmont (discussão | contribs)
Albmont (discussão | contribs)
== Fatos == trazidos e adaptados da Wikipedia
Linha 145:
=== Strings ===
Strings são normalmente escritas como uma seqüência de caracteres entre aspas. É comum serem representadas internamente como listas de códigos de caracteres, em geral utilizando a codificação local ou [[Unicode]], se o sistema dá suporte a Unicode. O ISO Prolog também permite que strings sejam representadas por uma lista de átomos com um único caractere.
 
== Fatos ==
Programar em Prolog é bem diferente de programar em uma linguagem procedimental. Em Prolog se fornecem fatos e regras para uma base de dados; então se executam consultas ou (''queries'') a essa base de dados. A unidade básica do Prolog é o predicado, que é postulado verdadeiro. Um predicado consiste de uma cabeça e um número de argumentos. Por exemplo:
 
gato(tom).
 
Isso informa à base de dados o fato que 'tom' é um 'gato'. Deve-se notar que esta interpretação é absolutamente flexível, não existe nenhuma obrigatoriedade de interpretar ''gato(tom).'' como significando que ''tom'' é um ''gato''. Nada impede, por exemplo, que a base de dados tenha a seguinte estrutura:
 
tom(gato).
jerry(rato).
spike(cachorro).
butch(gato).
 
Voltando ao exemplo ''gato(tom).'', formalmente, 'gato' é a cabeça e 'tom' é o único argumento do predicado. Alguns exemplos de consultas que podem ser feitas ao interpretador Prolog baseado nesse fato. Para saber se tom é um gato, escrevemos:
 
?- gato(tom).
yes.
 
Para saber que coisas (conhecidas) são gatos:
 
?- gato(X).
X = tom;
yes.
 
É importante notar que, sendo a base de dados apenas formada pelo predicado ''gato(tom).'', temos os seguintes resultados:
 
?- rato(tom).
No.
 
?- gato(jerry).
No.
 
?- rato(jerry).
No.
 
?- gato(butch).
No.
 
Note-se que ''No'' significa ''não sei''. A negação em Prolog é um assunto delicado, e o seu tratamento requer um cuidado especial.
 
Predicados são normalmente definidos para expressar algum fato sobre o mundo que o programa deve conhecer. Na maioria dos casos, o uso de predicados requer uma certa convenção. Por exemplo, qual das duas versões abaixo significaria que José é o pai de Ana?
 
pai(ana,jose).
pai(jose,ana).
 
Em ambos os casos 'pai' é a cabeça e 'ana' e 'jose' são argumentos. Entretanto, no primeiro caso Ana vem primeiro na lista de argumentos, e no segundo, quem vem primeiro é José (a ordem nos argumentos é importante). O primeiro caso é um exemplo de definição na ordem '''Verbo Sujeito Objeto''', e o segundo, na ordem '''Verbo Objeto Sujeito'''. Como Prolog não entende português, ambas as versões estão corretas de acordo com seu escopo; no entanto é uma boa prática de programação escolher uma única convenção para ser usada no mesmo programa, para evitar escrever algo como
 
pai(jose,ana).
pai(maria,joao).
 
De novo, nada impede que os predicados sejam escritos como:
 
ana(mae,maria).
joao(pai,jose).
 
Alguns predicados são pre-definidos na própria linguagem, permitindo que os programas Prolog desempenhem atividades rotineiras (como entrada/saída, uso de gráficos e outros tipos de comunicação com o sistema operacional). Por exemplo, o predicado <tt>write</tt> pode ser usado para saída na tela. Então,
 
write('Olá').
 
vai exibir a palavra 'Olá' na tela.