As mentioned on the core.logic wiki page you link to, core.logic's conde
is TRS's condi
. The difference is that TRS's conde
tries the clauses in order, while condi
interleaves the result streams. So the core.logic version will produce all the results displayed in TRS, but in between them it'll return other results which miniKanren never gets around to.
One relevant pattern in your longer answer is that if you take every second result starting from (())
, that subsequence of the result seq looks like the entire result seq with ()
prepended to each individual result. That's due to interleaving -- on this subsequence, ()
is chosen as the first element of the result, then lolo
recursively produces the rest.