This is how it can be done in clojure:
user=> (defmulti fib (fn [x] x) :default :default) #'user/fib user=> (defmethod fib 0 [x] 0) #<MultiFn clojure.lang.MultiFn@de1b8a> user=> (defmethod fib 1 [x] 1) #<MultiFn clojure.lang.MultiFn@de1b8a> user=> (defmethod fib :default [n] (+ (fib (- n 2)) (fib (- n 1)))) #<MultiFn clojure.lang.MultiFn@de1b8a> user=> (fib 32) 2178309 user=> (time (fib 32)) "Elapsed time: 3406.246008 msecs" 2178309 user=>
Factorial pattern matching:
(defmulti fac (fn [x] x) :default :default) (defmethod fac 1 [x] 1) (defmethod fac :default [n] (* n (fac (- n 1))))
Advertisement