Skip to content

Instantly share code, notes, and snippets.

@bsless
Created March 8, 2021 13:36
Show Gist options
  • Save bsless/d4a7abd0a93201660e10bf5fc2964be9 to your computer and use it in GitHub Desktop.
Save bsless/d4a7abd0a93201660e10bf5fc2964be9 to your computer and use it in GitHub Desktop.
Simple map filters in Clojure
(defn match
[m]
(reduce
(fn [f f']
(fn [m] (and (f m) (f' m))))
(map (fn [[k v]] #(= v (get % k))) m)))
(def bands
[{:genere :rock :name "Deep Purple"}
{:genere :metal :name "Iron Maiden"}
{:genere :metal :name "Motorhead"}])
(filter (match {:genere :metal}) bands)
(defmacro matchm
[m]
(let [g (gensym)]
`(fn [~g] (and ~@(map (fn [[k v]] `(= ~v (get ~g ~k))) m)))))
(filter (matchm {:genere :metal}) bands)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment