Wednesday, December 02, 2015

Clojure is cool

Fibinocci in a one-liner

(defn fib [n] (cond (= n 0) 1 (= n 1) 1 :else (+ (fib (dec n)) (fib (dec (dec n))))))

Polymorphism

(defprotocol Talkable (talk [self]))

(defrecord Cat [] Talkable (talk [self] "meow"))
(defrecord Dog [] Talkable (talk [self] "woof"))

(def c (Cat.))
(talk c) => "meow"

(def d (Dog.))
(talk d) => "woof"

(map talk [c d]) => ("meow", "woof")