Ich versuche, aus dieser Notation zu konvertieren:Prolog DCGs: Konvertieren von Programmier Notation logischer Notation
A and (B or C) equ A and B or A and C)
zu logischen Standardnotation dh Dinge wie and(A,B), or(A,B), neg(A)...
Ich dachte, dass ich schöne Art und Weise zu tun, Es würde DCGs verwenden (Ich habe diese Frage gestellt, weil ich DCGs üben möchte). Irgendwelche Ideen, warum meine Konvertierung nicht funktioniert? Bisher habe ich gerade die Disjunktion und den Fall geschrieben, wenn wir eine Variable bekommen. Die Antwort, die ich will, sollte oder (Atom (X), Atom (Y)) sein.
convert1(atom(X)) --> [X], {var(X)},!.
convert1(or(X,Y)) --> convert1(X), [or], convert1(Y).
test_convert1(F) :-
phrase(convert1(F), [X, or, Y]).
Danke Larsman, argh so albern. Das hat mein Problem allerdings nicht behoben. Ich habe gerade einen Kopier-/Einfügefehler gemacht, als ich den Code hier eingefügt habe. Trotzdem danke. – ale
@imperial, dann welcher Teil funktioniert nicht? Ich bekomme die Ausgabe 'X = oder (Atom (_G443), Atom (_G449))', was genau das ist, was ich erwarten würde. Wenn Sie in der Ausgabe "X" und "Y" sehen möchten, verwenden Sie nicht 'var/1'. –
Wirklich: S! Wie nennst du das? Ich wollte test_convert1 (F) aufrufen und dafür ausgeben, was du gesagt hast. Hmmmm tut mir leid, ich mache wahrscheinlich etwas wirklich Dummes. – ale