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

时间:2010-11-06 12:02:30

标签: clojure prolog the-little-schemer minikanren

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

cond-a仅提供第一个成功分支的答案

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

答案 1 :(得分:2)

我只想试着解决这些问题。有一个缩短的计划实施 Sokuza-kanren有一些评论,今晚我会读到它。