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?
Vous devez vous connecter pour publier un commentaire.
Si vous voulez le faire vous-même, de sorte que cela fonctionne aussi dans générative de la mode (contrairement à "nu" Prologue code comme on le voit dans CapelliC de réponse), alors:
cela fonctionne presque exactement comme vous l'avez indiqué:
bien sûr, vous avez besoin pour compléter la visite de votre DSL (Domain specific Language) arbre de syntaxe, ou de laisser Prolog exploiter ces règles de base: cela pourrait être facile comme
que les rendements
and(A,true).
et similaires; l'OP voulait trop de travail. 🙂