Я попытался использовать реализацию 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 возвращает только первое успешное объединение ... но, тем не менее, кажется, что это понимание неверно, когда я его использую. Может кто-нибудь помочь мне прояснить это понимание.