You can get most of the functionality you're looking for with partial
(map (partial * 3) (range 10)) => (0 3 6 9 12 15 18 21 24 27)
(map (partial apply max 0) (partition 3 1 (range -5 5))) => (0 0 0 0 1
2 3 4)
On Oct 22, 5:40 pm, André Thieme <[EMAIL PROTECTED]> wrote:
> On 22 Okt., 23:24, André Thieme <[EMAIL PROTECTED]> wrote:
>
> > This version of replace-placeholders still misses the numbered
> > args %1, %2, .. as the reader would also steal those from me.
> > In the end the #(..) macro would do it, instead of §.
>
> So what I just did was extending it for this demostration by using
> $1, $2, .. instead.
>
> First we need two little helpers:
> (defn digit-char? [char]
> ({\0 0 \1 1 \2 2 \3 3 \4 4 \5 5 \6 6 \7 7 \8 8 \9 9} char))
>
> (defn numbered-arg? [arg]
> (let [[$ & nums] (str arg)]
> (and (= $ \$)
> (every? digit-char? nums))))
>
> Btw, something like digit-char? would be nice for the boot.clj
>
> And now caring for the $n case:
> (defn replace-placeholders2 [body]
> ((fn [args num-args new-body [f & r :as b]]
> (if (not b)
> [(seq args) (seq new-body)]
> (cond (= f '_) (let [gensym (gensym)]
> (recur (conj args gensym)
> num-args
> (conj new-body gensym)
> r))
> (numbered-arg? f) (if-let val (get num-args f)
> (recur args num-args (conj new-body
> val) r)
> (let [gensym (gensym)]
> (recur (conj args gensym)
> (assoc num-args f gensym)
> (conj new-body gensym)
> r)))
> :default (recur args num-args (conj new-body f) r))))
> [] {} [] body))
>
> As I see it this might even support nested currying if only the outer
> one uses $1, $2, $3, ...
>
> Example: #(map #(+ 3) %1 %1)
>
> Translated §(map §(+ 3) $1 $1) and moved the § inside:
>
> user> ((§ map (§ + 3) $1 $1) (range 1 10) (range 200 300) (range 5000
> 6000))
> (5205 5209 5213 5217 5221 5225 5229 5233 5237)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---