clojure - mini-kanren cond-a cond-u 和 cond-e 有什么区别?

标签 clojure prolog the-little-schemer minikanren

我曾尝试在 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 只返回第一个成功的统一......但是当我使用它时,这种理解似乎是不正确的。有人可以帮我澄清这种理解。

最佳答案

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

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

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

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

关于clojure - mini-kanren cond-a cond-u 和 cond-e 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112996/

相关文章:

list - Prolog - 返回矩阵的第 n 行

scheme - 帮助理解 Scheme 中的 Continuations

recursion - 递归期间在方案中创建封闭过程的性能影响

scheme - 小策划 : length0 and mk-length

clojure - 这是关闭吗?如果是这样,为什么?

clojure 对性能不佳的代码的性能

bash - 从 bash 调用时 screen 以不同方式转义

prolog - 为什么 ISO/IEC 13211-1 的技术勘误 2 :1995 omit "bar" from the "token" rule?

clojure - 在运行时设置 Clojure "constants"

clojure - 等价于 'lein swank' 到其他带有 emacs/slime 的 Lisp/Scheme 实现