4

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

4

2 回答 2

4

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

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

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

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

于 2010-11-06T16:56:41.860 回答
2

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

于 2012-01-23T20:31:14.413 回答