I started writing a bit on contracts, but it was 2am and I really wanted to be done. (I thought I had a little more time between then and HN front page.) You're right, though, I should at least give it a shout and let people know about it.
Nice writeup, wish this existed back when I worked with Clojure. The migration away from clojure.contrib caused quite the mess. Back then (about a year ago), looking for a function you want (things you would expect in the standard library) was like this:
00:05 Found it in clojure.contrib
01:05 Figured out which standalone library it has moved to (or conclude that it has disappeared)
01:15 Figured artefact/group ID and current version out
1. Long regular expression strings that have quote marks involved. I'm not a fan of large, complex regexes, but a lot of people dislike the line-noise added by escaping.
2. Docstrings that may have quotes in them.
It's to remove the string escaping that makes literals look different from the strings they describe.
I was thinking about including the Leiningen dependency line, but I don't want someone including the wrong version later because I didn't update it. Install info is usually pretty prominent on the github pages of the projects (which I've linked to).
They're not on Clojars; the Maven repository they use is build.clojure.org. The project source code for all the contrib libraries is on Github at https://github.com/clojure
Give it two patterns with some unknowns and it tries to get values for the unknowns via pattern-matching. That's all it does! It's one of those things that humans do very well but computers have trouble with, so I'm afraid it doesn't look too impressive.
True, but your comment gave no indication of context, your knowledge level of clojure, awareness of logic programming, or an actual question. So, I had no basis to give a response that answered the question you did not ask. I honestly thought you were just trolling.
I suspect core.logic is the more practical library in many cases. I wrote a disproportionate amount on core.unify because I couldn't find any official docs that approached it from the perspective of someone (e.g. me) who didn't already know all about Prolog and unification in general.
https://github.com/clojure/core.contracts