2016-09-21 2 views
1

Ich bin sehr neu in Prolog. Versuchen Sie es so viel wie möglich in so kurzer Zeit wie möglich zu lernen. Jede Hilfe wird sehr geschätzt. Ich benutze übrigens MacOS Sierra.Prolog Falsche Zusammenstellung?

ich zur Eingabe versuchen diese Zeilen:

nextto(_A,_B). 
nextto(_B,_C). 

Wenn ich Prolog Befehlsfenster-Test, und führen Sie diesen Befehl:

?- nextto(A,C). 

Ist es falsch zurück eigentlich nicht?

Weil meine Kompilierungsergebnissen in wahr, wie folgt aus:

?- nextto(A,C). 
true 
+0

Ich brauche so zu codieren, dass Nextto (A, C). ist falsch. – SAN

+0

Ich glaube nicht, dass das mit nextto (A, C) möglich ist. Warum nicht mit nextto (a, c) statt ??? – coder

+0

Okay! Ich danke dir sehr!! Ich frage mich nur aus Neugier, also kann man das nicht mit Großbuchstaben erreichen ?! – SAN

Antwort

1

In Prologs _ betrachtet so etwas wie Großbuchstaben zu sein, und es hat seine eigene besondere Bedeutung, die anonyme Variable zu bezeichnen ist, so _A, _B sind (anonyme) Variablen (was auch immer mit dem Kapital in Prolog beginnt, ist variabel und kein Atom). Ihre Klauseln:

nextto(_A,_B). nextto(_B,_C). 

bedeutet eigentlich, dass Prädikat nexxto mit zwei Variablen erfolgreich ist. Also, wenn Sie neexto abfragen (A, C). es kehrt wahr zurück. Es würde auch wahr zurückgeben, wenn Sie neben (a, b) abfragen. wo jetzt a, b sind Atome und keine Variablen, weil es prüft, ob es eine Klausel neben (a, b) gibt. in deinen Klauseln. Wie gesagt, Ihre Klausel ist jedoch mit jeder Vereinigung von A, B erfolgreich. Auch da Ihr Prädikat nexxto gelingt es immer wieder würden Sie auch das gleiche Ergebnis mit nur Schreiben der eine Klausel:

nextto(_A,_B). 

statt:

nextto(_A,_B). nextto(_B,_C). 
+0

'_' wird nicht wirklich als Großbuchstabe betrachtet. Es hat in diesem Zusammenhang eine besondere Bedeutung, die anonyme Variable bezeichnen soll. Das bedeutet, dass Sie Prolog sagen können, dass Sie sich nicht um seinen Wert kümmern. So wird zum Beispiel 'foo (_A) .' keine * singleton Variable * Warnung erzeugen, aber' foo (A) .' wird. – lurker

+0

Ja, du hast absolut recht, ich habe gerade erwähnt, dass _ als Kapital betrachtet wird, weil ich sagen wollte, dass es sich wie eine Variable benehmen wird und in keiner Weise als Ausdruck danke, dass du das aufzeigst !!! Ich werde die Antwort bearbeiten, um in diesem Teil klarer zu sein ... – coder