4 ms·
I like the Clojure form of multimethods a lot, it's even neater than CLOS. ( http://clojure.org/runtime_polymorphism http://clojure.org/runtime_polymorphism )
by Jach 15y ago
I like the Clojure form of multimethods a lot, it's even neater than CLOS. ( http://clojure.org/runtime_polymorphism http://clojure.org/runtime_polymorphism )
C's dynamic dispatch hack isn't so terrible though--e.g. Microsoft has been doing it for a long time by sticking in a "useless" instruction at the start of every function. http://blogs.msdn.com/b/oldnewthing/archive/2011/09/21/10214405.aspx http://blogs.msdn.com/b/oldnewthing/archive/2011/09/21/10214...
- arethuza 15y agoDoes Clojure do method combinations? I was very fond of :before, :around and :after methods of the standard method combination and loved the fact that, if you really wanted to, you could have your own method combinations. I know that "Aspect Oriented" tools support some of this stuff, but the last time I looked at those (admittedly a while ago) they seemed, at least for Java, to be pretty hacky. Not that I use Java anymore...
- Jach 15y agoClojure doesn't implement those out-of-the-box, but there might be a contrib module somewhere macroing it in... I think they're petty neat too.
- frio 15y agoJust for my own sanity - is "multimethod" another term for a form of pattern matching? Looking at the clojure code, it strongly reminds me of Haskell: encounter :: Species -> Species -> Result encounter (Bunny _) (Lion _) = RunAway encounter (Lion _) (Bunny _) = Eat etc. Of course, pseudocode, syntax errors, whatever - but it looks to be the same idea? edit - formatting
- thurn 15y agoA key difference is that Haskell functions can only have one type signature, so you need to explicitly make "Bunny" and "Lion" data constructors for "Species". Multimethods operate on multiple types. You can fake multimethods in Haskell with multi-parameter type classes (with the language extensions to allow undecidable and overlapping instances).
- frio 15y agoI see. Thanks!
- Jach 15y agoRich Hickey actually commented on the difference between multimethods and pattern matching here: http://sadekdrobi.com/2009/05/27/multimethod-in-clojure-should-i-call-it-first-class-pattern-matching-or-pattern-matching-in-disguise/#comment-15412 http://sadekdrobi.com/2009/05/27/multimethod-in-clojure-shou... (Here's a pattern matching module I know of: https://github.com/brool/clojure-misc https://github.com/brool/clojure-misc )