I think your work is a wonderful idea.  I've been wanting to do this
myself for some time.
Thanks for actually doing it instead of just thinking about it.

I have some humble thoughts/suggestions after reading your code; I'd
love to hear what you think about these points:

1. I think that auto-currying itself should be a higher order
function, which a macro then makes easier to use.
2. Your def-curry-fn doesn't allow for easy embedding of metadata like
defn does; it could take advantage of defn from core for all that.
3. Your def-curry-fn is similar in spirit to defn-memo from
clojure.contrib.def, but it's hard to combine it with that macro to
get both effects (both curried and memoized) I feel like this is
asking for a higher level of abstraction of "apply this unitary
higher-order transform to the following definition" than making a
defn-"higher-order-transform" macro for every transform those type of
functions are called decorators in some other languages.


I've sketched out a hopefully enhanced version of your code here:
https://gist.github.com/746185

While writing it, I found it convenient to extend the domain of
partial to include a single argument.
i.e. (= (partial f) f)
I think it might be a good enhancement of the partial function, as it
logically flows from the other airties.
Do people think it would be a good patch for core?

Please tell me what you think of my code :)  All criticisms are
welcome; I too am still learning.

Sincerely,
--Robert McIntyre


On Fri, Dec 17, 2010 at 9:00 PM, Sunil S Nandihalli
<sunil.nandiha...@gmail.com> wrote:
>
>
> On Sat, Dec 18, 2010 at 7:21 AM, Sunil S Nandihalli
> <sunil.nandiha...@gmail.com> wrote:
>>
>> Hi Eric,
>>  I do know about partial. But what I am saying is that the extra function,
>> partial, is not necessary if the function was created with
>> def-curry-fn....... The function automatically returns a curried version
>> when called with fewer number of arguments than necessary.... like it
>> happens in haskell..
>> thanks,
>> Sunil.
>> On Sat, Dec 18, 2010 at 3:02 AM, Eric Schulte <schulte.e...@gmail.com>
>> wrote:
>>>
>>> Hi Sunil,
>>>
>>> This is already possible using `partial' function in clojure core, which
>>> also works for variable arity functions, e.g.
>>>
>>> (map (partial reduce +) [[1 2 3 4] [5 6 7 8]])
>>>
>>> Best -- Eric
>>>
>>> Sunil S Nandihalli <sunil.nandiha...@gmail.com> writes:
>>>
>>> > Hello everybody,
>>> >  I remember that the key reasoning for not supporting currying in
>>> > clojure
>>> > was to be able to have variable number of arg functions.. So, I just
>>> > thought
>>> > a bit and realized that it should be possible to do that for fixed
>>> > arity
>>> > functions .. and then wrote the following macro to define a curry-able
>>> > fixed-number-of-argument-function
>>> >
>>> > https://gist.github.com/745654
>>> >
>
> If the following was defined as
> (defn f [a b c d]
>   (+ a b c d))
>>>
>>> > (def-curry-fn f [a b c d]
>>> >   (+ a b c d))
>>> >
>>> > ((f 1) 2 3 4)  => 10
>
> the above s-expression using partial would become ...
> ((partial f 1) 2 3 4) => 10
>>>
>>> > (((f 1 2) 3) 4) => 10
>
> and ((partial (partial f 1 2) 3) 4) => 10 instead of (((f 1 2) 3) 4)..
> ((((f 1) 2) 3) 4) => 10
> would become
> ((partial (partial (partial f 1) 2) 3) 4) => 10 .....
> I know there is no real practical utility .. .. it was just something I
> wrote for fun.. and thought of sharing it ...
> Sunil.
>>>
>>> >
>>> > I just thought of sharing it with everybody. Would love to hear any
>>> > criticisms you may have.
>>> >
>>> > Thanks for reading,
>>> > Sunil
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clojure@googlegroups.com
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+unsubscr...@googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/group/clojure?hl=en
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to