Ah, my apologies,

Thanks for clarifying, I should have looked more closely at your code
before responding.  That is indeed a very nice idea (and an aspect of
Haskell that I sorely miss in Clojure).

I could see myself wanting to use this on a namespace level, e.g. have
all functions defined in a namespace curryable.  I'll have to look at
your code when I have some time.  I wonder if something like this can be
practical in a language where all functions aren't unary by default.

Thanks -- Eric

Sunil S Nandihalli <sunil.nandiha...@gmail.com> writes:

> 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<clojure%2bunsubscr...@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