2010-11-06 150 views
2

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

回答

2

COND-E提供了从成功

COND,我给每一个答案,但它们交错各分支机构每一个答案。

COND,仅给出了从第一支成功的答案

COND-U只给出了从第一支成功

+0

谢谢吉姆..但究竟是交错?它是否像它从每个分支得到一个成功的答案..在回到下一个成功答案的第一个分支之前......? – 2010-11-08 04:56:48

+0

根据你的解释,无论我使用cond-u还是cond-a代替cond-,下面的代码应该表现相同。 (运行q (存在[X] (cond- ((&X:未分配) 失败) (成功)) (&Q 20)))但是,这似乎并没有这样的情况?你能解释一下吗? – 2010-11-08 06:09:45

2

我只是试图让我的头围绕这些问题的第一个答案。有一个简短的计划实施 Sokuza-kanren有几个意见,我今晚会读它。

+0

阅读Sokuza-Kanan的实现非常有启发性。感谢您的链接。 – soegaard 2015-07-13 11:42:27