Skip to content

Instantly share code, notes, and snippets.

@lagenorhynque
Last active November 28, 2017 05:23
Show Gist options
  • Select an option

  • Save lagenorhynque/90fef14f59b3a135931d2057ca31caa8 to your computer and use it in GitHub Desktop.

Select an option

Save lagenorhynque/90fef14f59b3a135931d2057ca31caa8 to your computer and use it in GitHub Desktop.
user> (defn fib [n]
(cond
(= n 0) 0
(= n 1) 1
:else (+ (fib (- n 1))
(fib (- n 2)))))
#'user/fib
user> (map fib (range 10))
(0 1 1 2 3 5 8 13 21 34)
user> (require '[clojure.spec.alpha :as s])
nil
user> (s/fdef kond
:args (s/cat :clauses (s/* (s/spec (s/cat :pred any?
:exprs (s/+ any?)))))
:ret any?)
user/kond
user> (defmacro kond [& clauses]
(when-let [[fcl & rcls] clauses]
`(if ~(first fcl)
(do ~@(rest fcl))
(kond ~@rcls))))
#'user/kond
user> (defn fib' [n]
(kond [(= n 0) 0]
[(= n 1) 1]
[:else (+ (fib' (- n 1))
(fib' (- n 2)))]))
#'user/fib'
user> (map fib' (range 10))
(0 1 1 2 3 5 8 13 21 34)
user> (defn fib'' [n]
(kond ((= n 0) 0)
((= n 1) 1)
(:else (+ (fib'' (- n 1))
(fib'' (- n 2))))))
#'user/fib''
user> (map fib'' (range 10))
(0 1 1 2 3 5 8 13 21 34)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment