ich mit core.logic experimentieren, und möchte meine eigenen benutzerdefinierten Datentyp ermöglichen, in logischen Ausdrücken teilnehmen:Erweiterung core.logic, um benutzerdefinierte Typen
(deftype Expression [node vars]
....)
Im Grunde ist dies ein Knoten in einem mathematischen Ausdruck Baum darstellt, enthält einen Knotenbaum und einen Satz von ungebundenen Variablen, die verwendet werden. node
ist entweder eine Konstante, ein Symbol oder ein (Operator Expression Expression....)
Baumknoten. Ich würde gerne in der Lage sein, core.logic zu benutzen, um mathematische Ausdrücke zu manipulieren und gegen Teilbäume solcher Ausdrücke zu passen.
Wie kann ich das tun, wenn möglich?
ich aus dem core.logic Quellcode sehe, dass es ein number of protocols, die aussehen wie sie wären gut (zB IUnifyTerms
, IReifyTerms
etc.) zu verlängern, aber es ist nicht ganz klar, wie diese sind alle verwendet werden soll, und welche ich wirklich erweitern muss.
Sie könnten Interesse an Term Rewrite-Systeme. Ich habe festgestellt, dass das Betrachten der vorhandenen Implementierungen von dem, was Sie versuchen, fruchtbar waren (Maude, Stratego/XT sind nett). Beachten Sie auch, dass Sie möglicherweise auf das assoziative-kommutative Matching-Problem stoßen. Ein rechenintensives Teilproblem, das bestehende core.logic-Maschinen nicht besonders gut unterstützen würden (das letzte Mal, als ich es überhaupt überprüft habe.) – MRocklin