I have tried to use an implementation of mini-kanren in clojure. But been struggling to understand the difference between cond-a cond-u and cond-e. I seem to be quite clear
cond-e gives every answer from all branches that succeed
cond-i gives every answer but interleaves them.
cond-a only gives the answers from the first successful branch
cond-u only gives the first answer from the first successful branch
I was just trying to get my head around these matters. There's a shortified scheme implementation Sokuza-kanren with a few comments, I'll read it tonight.