I got distracted from everything else I was doing, and put together a prototype μKanren library in Python. The main functionality I'm missing is the core of the unify function, because I haven't decided which data types I want it to be able to handle. Thinking about that reminded me of the probably-not-well-explained logic at the heart of Structured Data's matching system, which I'd like to point at more specifically, but it is extremely decoupled.
The other thing I'm worried about is the implementation of the bind function. In most parts of the prototype, I was able to rewrite recursion into iteration, but I did not work that out for bind yet, due to it's usage of mplus, which I'm not totally happy with my implementation of either. Now that I write this, I have some ideas.
Well, after thinking about those ideas, the code is different now. I don't know about better or worse, but it's different. It's still got some open questions that need to be answered in order to finish the implementation.
Anyway, I didn't have a specific reason for doing any of this.