MiniKanren conde
First let us understand cond
:
cond
returns the first successful result:
(run (q)
(cond
(#s (== olive q)) ;; First branch matches
(#s (== fire q))
(else #u)))
;; evaluates to (olive)
We want all possible values of q
however:
(run (q)
(conde
(#s (== olive q)) ;; First branch matches
(#s (== fire q))
(else #u)))
;; evaluates to (olive, fire)