Skip to content

Instantly share code, notes, and snippets.

@timsgardner
Last active September 12, 2015 09:07
Show Gist options
  • Select an option

  • Save timsgardner/cbc9b32fc6c5ea1090f5 to your computer and use it in GitHub Desktop.

Select an option

Save timsgardner/cbc9b32fc6c5ea1090f5 to your computer and use it in GitHub Desktop.
comp-pro
(defmacro ^:private defn-meval [& preamble-and-meval-to-forms]
(let [preamble (butlast preamble-and-meval-to-forms)
meval-to-forms (last preamble-and-meval-to-forms)
mevaluated (eval meval-to-forms)]
`(defn ~@preamble
~@mevaluated)))
(defn-meval comp-pro
(let [fargs (repeatedly gensym)
xarg (gensym "xarg")]
(concat
(for [i (range 1 21)]
(let [fargs2 (vec (take i fargs))]
`(~fargs2
(fn [~xarg]
~(reduce #(list %2 %1) xarg (reverse fargs2))))))
[(let [fargs2 (vec (take 20 fargs))
rstfargs (gensym "rstfargs_")]
`(~(conj fargs2 '& rstfargs)
(fn [~xarg]
~(reduce #(list %2 %1)
`(reduce #(%2 %1) ~xarg (reverse ~rstfargs))
(reverse fargs2)))))])))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment