2010-11-06 80 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

相關問題