Regras

editar

O segundo tipo de predicado no Prolog é a regra, também chamada de "cláusula". Exemplos de uma regra são:

a :- b, c, d.
luz(acesa) :- interruptor(ligado). 

O ":-" significa "se". Estas regras dizem:

  • que 'a' é verdadeiro se 'b', 'c', e 'd' são verdadeiros
  • que luz(acesa) é verdadeiro se interruptor(ligado) é verdadeiro.

Regras podem também fazer uso de variáveis, como por exemplo,

avo(X,Z) :- pai(X,Y), pai(Y,Z).

(X é avô de Z se X é pai de Y e Y é pai de Z)

Isso significa "se alguém é pai de outra pessoa, que por sua vez é pai de uma terceira, então ele é avô". O antecedente e o conseqüente estão na ordem inversa do que é normalmente encontrado na notação da lógica: o conseqüente é escrito primeiro e é chamado a cabeça da regra, o antecedente é chamado corpo. A conjunção (e) é escrita como ",", enquanto a disjunção (ou) é escrita como ";". Também é possível colocar múltiplos predicados em um mesmo corpo, unindo seus antecedentes por disjunção, como por exemplo:

a :- b;c;d.

que é equivalente às três regras separadas:

a :- b.
a :- c. 
a :- d.

No entanto não são permitidas regras como:

a;b :- c.

Ou seja, "se c então a ou b". Isso é devido à restrição às cláusulas de Horn.

Uma maneira de simular tal regra, usando o operador de negação (que será visto com detalhes mais adiante, em Prolog/Negação), é:

a:-c,not(b).