Clojure tips: patterns matching

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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s


Follow

Get every new post delivered to your Inbox.