Prologue: Et-Ou des expressions (fonction booléenne)

Je suis en train de faire un devoir nécessité de mettre en œuvre deux relations et(A,B) et(A,B) effectuer les logiques “ET” et le “OU” logique des opérations sur les deux opérandes Booléens A et B. Rapport et(A,B)est titulaire si A et B sont vraies (true). Relation ou(A,B)est titulaire si A ou B est évaluée à true, ou les deux, A et B sont vraies (true). Un Et-OU de l'expression peuvent être imbriquées, par exemple, et(ou(A,B) et(C,D)).

Quelques exemples d'entrée et de sortie:

?- and(true,false).
false.
?- or(true,false).
true.
?- and(A,true).
A = true ;
false.
?- or(A,B).
A = true ;
B = true ;
false.
?- and(or(A,B),and(C,D)).
A = true,
C = true,
D = true ;
B = true,
C = true,
D = true ;
false.
?- or( and(or(A,B),C), or(and(D,E),or(F,G)) ).
A = true,
C = true ;
B = true,
C = true ;
D = true,
E = true ;
F = true ;
G = true ;
false.

Mon code:

and(true,true).
and(false,_):-false.
and(_,false):-false.
or(true,_).
or(_,true).
or(false,false):-false.

Quand je lance la simple et ou expressions, c'est ok. Mais quand je lance certaines expressions inclus imbriquées et-ou des expressions, il vient de donner de "faux" comme réponse. Comment puis-je corriger le code de sorte qu'il peut fonctionner avec imbriqué et-ou expressions?

InformationsquelleAutor Peter | 2013-11-20