Skip to content

Instantly share code, notes, and snippets.

@alandipert
Created May 2, 2013 05:17
Show Gist options
  • Save alandipert/5500279 to your computer and use it in GitHub Desktop.
Save alandipert/5500279 to your computer and use it in GitHub Desktop.
(defn remove-first [pred coll]
(let [[xs ys] (split-with (complement pred) coll)]
(concat xs (rest ys))))
(definterface FirstRemover
(^clojure.lang.LazySeq removeFirst [coll]))
(definterface FirstRemoverFactory
(^user.FirstRemover makeRemover [pred]))
(deftype GenericRemover [pred]
user.FirstRemover
(removeFirst [this coll] (remove-first pred coll)))
(deftype GenericRemoverFactory []
user.FirstRemoverFactory
(makeRemover [this pred] (GenericRemover. pred)))
(.removeFirst (.makeRemover (GenericRemoverFactory.) even?) [1 2 3 4])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment