2011-01-07 8 views
0

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]). 

Antwort

1

Es gibt einen Fehler Syntax in test_convert1/1. Es sollte lesen

test_convert1(F) :- 
    phrase(convert1(F), [X, or, Y]). 
+0

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

+0

@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'. –

+0

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

1

Ihr Code enthält zwei Fehler:

  1. Im ersten Abschnitt sind Sie nicht X aus der analysierten Liste zu lesen.
  2. Schnitte in DCGs sollten außerhalb der geschweiften Klammern sein.

Eine Arbeitsversion ist:

convert1(atom(X)) --> [X], {var(X)}, !. 
convert1(or(X,Y)) --> convert1(X), [or], convert1(Y). 
+0

Hallo, danke für das Aufzeigen der Fehler. Aus irgendeinem Grund gibt es immer noch keine Antworten. Würde es dir etwas ausmachen, einen Blick darauf zu werfen? Ich denke es ist wahrscheinlich in der test_convert/1? – ale