【发布时间】:2013-03-24 00:31:24
【问题描述】:
我正在试验core.logic,并希望启用我自己的自定义数据类型参与逻辑表达式:
(deftype Expression [node vars]
....)
基本上,这表示数学表达式树中的一个节点,包含一个节点树和一组使用的未绑定变量。 node 是常量、符号或 (Operator Expression Expression....) 树节点。我希望能够使用 core.logic 来操作数学表达式,并匹配此类表达式的子树。
如果可能,我该怎么做?
我从 core.logic 源代码中看到有一个 number of protocols 看起来可以很好地扩展(例如 IUnifyTerms、IReifyTerms 等),但尚不完全清楚这些都是什么意思要使用,哪些是我真正需要扩展的。
【问题讨论】:
-
您可能对术语重写系统感兴趣。我发现查看您正在尝试的现有实现是富有成效的(Maude,Stratego/XT 很好)。另外,请注意您可能会遇到关联交换匹配问题;一个计算上具有挑战性的子问题,现有的 core.logic 机器不能很好地支持(我上次检查过。)
标签: clojure protocols logic-programming clojure-core.logic