mini-kanren В чем разница между cond-a cond-u и cond-e? - PullRequest
4 голосов
/ 06 ноября 2010

Я попытался использовать реализацию mini-kanren в clojure. Но изо всех сил пытался понять разницу между cond-a cond-u и cond-e. Кажется, я вполне понимаю, что такое cond-e, но понимание cond-a и cond-u довольно плохо.

cond-e берет набор целей, а затем пробует каждую из них ... то есть пробует все успешные ветви.

cond-a и cond-u, напротив, передают ветку, первый предикат которой завершается успешно, и cond-a возвращает все возможные успешные объединения после этого. в то время как cond-u возвращает только первое успешное объединение ... но, тем не менее, кажется, что это понимание неверно, когда я его использую. Может кто-нибудь помочь мне прояснить это понимание.

Ответы [ 2 ]

4 голосов
/ 06 ноября 2010

cond-e дает каждый ответ из всех успешных ветвей

cond-i дает каждый ответ, но чередует их.

cond-a дает только ответы из первой успешной ветки

cond-u дает только первый ответ из первой успешной ветки

2 голосов
/ 24 января 2012

Я просто пытался разобраться в этих вопросах.Есть краткая схема реализации Sokuza-kanren с несколькими комментариями, сегодня вечером я прочитаю.

...