Clojure mini-kanren cond-a cond-u和cond-e的区别是什么?

Clojure mini-kanren cond-a cond-u和cond-e的区别是什么?,clojure,prolog,the-little-schemer,minikanren,Clojure,Prolog,The Little Schemer,Minikanren,我曾尝试在clojure中使用mini-kanren的实现。但是一直在努力理解cond-a cond-u和cond-e之间的区别。我似乎对cond-e很清楚,但对cond-a和cond-u的理解相当糟糕 cond-e设定了一组目标,然后尝试每个目标。。。i、 e尝试所有成功的分支 相反,cond-a和cond-u提交给第一个谓词成功的分支,cond-a返回所有可能的成功统一。而cond-u只返回第一个成功的统一。。。但是,当我使用它时,这种理解似乎是不正确的。有人能帮我澄清一下这种理解吗。con

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

cond-e设定了一组目标,然后尝试每个目标。。。i、 e尝试所有成功的分支


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

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

cond-i给出了所有答案,但将它们交错

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


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

我只是想了解一下这些问题。有一个简短的计划实施
有几点意见,我今晚就看。

谢谢吉姆。。但交织究竟是什么呢?是不是每个分支都能得到一个成功的答案。。在返回第一个分支以获得下一个成功答案之前?根据您的解释,无论我使用cond-u还是cond-a来代替cond-,以下代码的行为都应该相同?运行q存在[x]条件-?&x:未分配失败成功&q 20,但情况似乎并非如此。。。。您能解释一下吗?阅读Sokuza kanren实现非常有启发性。谢谢你的链接。