Prolog/Regras
Regras
[editar | editar código-fonte]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).