【问题标题】:Extending core.logic to custom types将 core.logic 扩展到自定义类型
【发布时间】:2013-03-24 00:31:24
【问题描述】:

我正在试验core.logic,并希望启用我自己的自定义数据类型参与逻辑表达式:

(deftype Expression [node vars]
  ....)

基本上,这表示数学表达式树中的一个节点,包含一个节点树和一组使用的未绑定变量。 node 是常量、符号或 (Operator Expression Expression....) 树节点。我希望能够使用 core.logic 来操作数学表达式,并匹配此类表达式的子树。

如果可能,我该怎么做?

我从 core.logic 源代码中看到有一个 number of protocols 看起来可以很好地扩展(例如 IUnifyTermsIReifyTerms 等),但尚不完全清楚这些都是什么意思要使用,哪些是我真正需要扩展的。

【问题讨论】:

  • 您可能对术语重写系统感兴趣。我发现查看您正在尝试的现有实现是富有成效的(Maude,Stratego/XT 很好)。另外,请注意您可能会遇到关联交换匹配问题;一个计算上具有挑战性的子问题,现有的 core.logic 机器不能很好地支持(我上次检查过。)

标签: clojure protocols logic-programming clojure-core.logic


【解决方案1】:

core.logic 旨在扩展为自定义类型。然而,这并没有得到很好的记录,因为随着我们了解究竟需要什么,协议可能会发生变化。值得检查 clojure.core.logic.nominal 命名空间,以了解将 core.logic 扩展到自定义类型所需的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2010-10-13
    相关资源
    最近更新 更多