我曾尝试在clojure中使用mini-kanren的实现。但一直在努力去理解cond-a cond-u和cond-e之间的区别。我似乎对cond-e很清楚,但对cond-a和cond-u的理解却很不好。mini-kanren cond-a cond-u和cond-e的区别是什么?
cond-e需要一组目标,然后尝试每个目标......即尝试所有成功的分支。
cond -a和cond-u相反提交给第一个谓词成功的分支,cond-a返回所有可能的成功统一。而cond-u只返回第一个成功的统一......但是,当我使用它时,似乎这种理解是不正确的。有人能帮助我澄清这一理解。
谢谢吉姆..但究竟是交错?它是否像它从每个分支得到一个成功的答案..在回到下一个成功答案的第一个分支之前......? – 2010-11-08 04:56:48
根据你的解释,无论我使用cond-u还是cond-a代替cond-,下面的代码应该表现相同。 (运行q (存在[X] (cond- ((&X:未分配) 失败) (成功)) (&Q 20)))但是,这似乎并没有这样的情况?你能解释一下吗? – 2010-11-08 06:09:45