Soweit ich core.logic finden kann, kann die Algebra diese Gleichung nicht lösen. Es kann grundlegende mathematische Berechnungen durchführen, obwohl die Eingaben für diese Mathematik tatsächliche Werte sein müssen, nicht LVar
s, da die mathematischen Funktionen auf diesen nicht funktionieren können:
funktioniert, wenn x einen eindeutigen Wert hat und schlägt fehl, wenn x nicht:
%Vor% Sie sollten The Reasoned Schemer für Ideen lesen. Im Grunde ist die Art und Weise, wie man Mathematik in einem Logikprogramm ausführt, listenbasierte Codierungen von Zahlen, die die Logik-Engine nach Bedarf erweitern kann, um Dinge auszuprobieren. Ich habe das Buch nicht griffbereit, aber es kodiert Ganzzahlen als eine Liste von Bits, auf eine seltsame Art und Weise kann ich mich nicht recht erinnern: vielleicht (1)
repräsentiert 0, (0)
ist illegal, und das MSB ist zuletzt in der Liste?
Wie auch immer, das ist eine Menge Arbeit; David Nolen hat kürzlich auch etwas über finite Domains in core.logic eingeführt. Ich weiß nicht, wie diese funktionieren, aber ich denke, sie vereinfachen das Problem sehr für Sie, indem Sie angeben, welche Arten von Zahlen Sie als Lösung für Ihr Problem betrachten.
core.logic in seiner aktuellen Form ist nicht als Lösung für numerische Gleichungen ausgelegt - es ist besser geeignet, um logische Probleme zu lösen und relationale Ausdrücke.
Sie haben grundsätzlich zwei praktische Möglichkeiten, mathematische Gleichungen zu lösen:
Gleichung Solver erfordern besondere Intelligenz, um die "Regeln" der mathematischen Gleichungen, z. wie man polynomische Ausdrücke faktorisiert (für analytische Lösungen) oder wie man eine Ableitung (für numerische Lösungen) schätzt.
Einige Links, die interessant sein könnten:
Tags und Links clojure clojure-core.logic