Clojure Pattern Matching Lib: literal, seq, map and other patterns
groups.google.com
groups.google.com
* This is yet another example of how powerful macros are. All the features described are implemented in ~700 lines of code and a single macro.
* The pattern matching library is meant to be user extensible - you'll be able add your own patterns / syntax. Users simply need to bring their data types to whatever protocol is required by your new pattern. I think this going to be crazy powerful. For example - very fast pattern matching on primitive arrays / buffers.
* This is the groundwork for bringing high performance predicate dispatch to Clojure. This is under explored territory for dynamic languages.
I'm pretty new to Clojure, but one of the things that I'm starting to pick up on is the ridiculous speed with which the language can evolve. It seems that in non-Lisp languages, features like this would have to start as compiler extensions and would only move into the mainstream via the molasses-slow process of maybe being included in the mainline compiler. With Clojure, the language can iterate as fast as any library. Pretty exciting.
[1] http://en.wikipedia.org/wiki/Unification_%28computer_science...
Unification based pattern matching is fantastic in its generality - not so much performance.
So here's my little logic programming interpreter: https://github.com/rikusalminen/slolog
I really like the way how pattern matching (in Haskell, etc) is transformed into a bunch of case expressions, which can then be compiled into code where each argument is evaluated only once and each "then" expression is compiled only once (no duplicates).
However, to my best knowledge, it requires some static type information to make the compiling transformation possible. E.g. the Haskell compiler knows that a Maybe Bool can have only three possible values: Just True, Just False or Nothing.
How do you do this in Clojure with dynamic typing? This really intrigues me and you're really pushing the boundaries of dynamic languages and compiling here a little bit. Very interesting indeed!
* For the uninitiated: you can find good description of compiling pattern matching in Simon Peyton Jones's book here: http://research.microsoft.com/en-us/um/people/simonpj/papers...