Zwei verwandte Fragen in einem:
Kann das core.logic-Modul von Can Clojure arithmetische, logische Vergleiche usw. durchführen, wie gewöhnliches Prolog? Ich stelle mir so etwas wie Folgendes vor:
%Vor% In diesem Beispiel funktioniert weder der logische Vergleich (< x y)
noch die versuchte Bindung von q an (+ x y)
. Ich nehme an, dass dies daran liegt, dass ich mit LVar
s arbeite, an dieser Stelle keine ganzen Zahlen, und ich kann diese Vergleiche nicht machen, weil die Symbole noch nicht gebunden sind. Aber es funktioniert im Prolog:
Kann ich in ähnlicher Weise Clojure-Funktionen (die Booleans oder andere "truthige" Werte zurückgeben) irgendwie als logische Prädikate verwenden? Mit anderen Worten, Funktionen zu verwenden, um Minikanren mitzuteilen, welche Begriffe vereinheitlicht werden oder nicht. Etwas in der Art von:
%Vor%Wenn ich solche Dinge versuche, bekomme ich auch Fehler, dass die LVars nicht gebunden sind. Gibt es eine Möglichkeit, dies zu tun?
Wenn jemand so weit gelesen hat, könnte ich auch fragen: Gibt es Pläne, probabilistische Logik in core.logic einzubauen, etwa wie folgt:
Ссылка ?
Ich halte nicht den Atem an, aber es wäre großartig!
Nicht-relationale Arithmetik ist über project
möglich.
Ich glaube, dass das Prolog-Beispiel auch nicht-relational ist.
Die zweite Hälfte Ihrer Frage kann auch über project
gelöst werden, aber Sie müssen darauf achten, dass Sie immer einen Grundwert eingeben.
PS: Halten Sie den Atem an, damit Constraint Logic Programming zu core.logic kommt!
Ich glaube, dass Sie eine logische Variable (nonrel / project) auf die Bindung "projizieren" müssen, bevor Sie eine Funktion darauf anwenden können:
%Vor%Beachten Sie, dass exists im Original-Snippet und das zusätzliche Argument für die Fakt-Deklarationen expres- siert.