【问题标题】:mini-kanren what is the difference between cond-a cond-u and cond-e?mini-kanren cond-a cond-u 和 cond-e 有什么区别?
【发布时间】:2011-05-06 00:11:27
【问题描述】:

我尝试在 clojure 中使用 mini-kanren 的实现。但是一直在努力理解 cond-a cond-u 和 cond-e 之间的区别。我似乎对 cond-e 很清楚,但对 cond-a 和 cond-u 的理解却很糟糕。

cond-e 获取一组目标,然后尝试每个目标......即尝试所有成功的分支。

cond-a 和 cond-u 相反提交到第一个谓词成功的分支,并且 cond-a 返回之后所有可能的成功统一。而 cond-u 只返回第一个成功的统一......但是当我使用它时,这种理解似乎是不正确的。有人可以帮我澄清一下这种理解吗?

【问题讨论】:

    标签: clojure prolog the-little-schemer minikanren


    【解决方案1】:

    cond-e 给出所有成功分支的所有答案

    cond-i 给出每个答案,但将它们交错。

    cond-a 只给出第一个成功分支的答案

    cond-u 只给出第一个成功分支的第一个答案

    【讨论】:

    • 谢谢 Jim.. 但是交错到底是什么?是不是就像它从每个分支获得一个成功的答案......然后回到第一个分支以获得下一个成功的答案......?
    • 根据您的解释,无论我使用 cond-u 还是 cond-a 代替 cond-,以下代码的行为都应该相同? (运行 q (exist [x] (cond-? ((& x :unassigned) fail) (succeed)) (& q 20))) 但情况似乎并非如此......你能解释一下吗?
    【解决方案2】:

    我只是想弄清楚这些问题。有一个简短的方案实施 Sokuza-kanren 有几个cmets,我今晚读。

    【讨论】:

    • 阅读 Sokuza-kanren 实现非常有启发性。感谢您的链接。
    猜你喜欢
    • 1970-01-01
    • 2016-02-09
    • 2020-01-01
    • 2016-06-21
    • 1970-01-01
    • 2021-10-26
    • 2011-05-01
    • 2013-05-01
    • 2019-08-07
    相关资源
    最近更新 更多