条件にある値を複数とれるようにしてみたり
(defmacro case [base-val & patterns]
(cons
'cond
(fold (fn [[val & more] res]
(concat
res
(list (cond
(vector? val) `(or ~@(map #(list '= base-val %) val))
(= val :else) val
:else `(= ~base-val ~val))
(first more))))
()
(partition 2 patterns))))usage:
(case x [1 2 3] "one-three" 4 "four" :else "ng")
