Ich habe ein Prädikat, das seine Argumente vereinen kann, zum Beispiel:Erkennen, ob ein Prädikat beweisen Unified etwas
foo(X) :- X = 42.
Wie kann ich feststellen, ob, während foo(X)
beweist, Vereinigung X verändert? Zum Beispiel würde ich gerne wissen, ob writeln(X), foo(X), writeln(X)
den gleichen Wert für X zweimal drucken würde, ohne tatsächlich zu drucken.
Meine eigentliche Implementierung von foo/1
ist eigentlich viel komplexer, also bitte nicht spezifisch für die vereinfachte Version oben vorschlagen. In meinem Programm foo(X)
vereinfacht X
mit Unification, aber foo(X)
muss möglicherweise mehrmals bewiesen werden, bis alle Vereinfachungen durchgeführt worden sind. Ich möchte in der Lage sein, ein foohelper(X)
Prädikat zu schreiben, das foo(X)
aufruft, bis X
stoppt, vereinheitlicht zu werden.
** Wann möchten Sie mitteilen, ob 'X' instanziiert wurde? (Wir ändern 'X' nicht, wir instanziieren es) – false
Ich möchte wissen, ob' X' instanziiert wurde, während '' foo (X) 'an der Stelle des zweiten' writeln (X) 'in meinem Beispiel bewiesen wurde. –