|
![](/i/fill.gif) |
Warp escreveu:
> clipka <ano### [at] anonymous org> wrote:
>> So yes: Currying *is* like writing a function that takes fewer
>> arguments, calling the original one and supplying (unchangeable)
>> defaults for the missing arguments.
>
> I think that the difference is that the new function is not static,
> but it's generated dynamically. (In other words, what you end up is a
> new function which fixes some of the parameters of the original function,
> but the values to which they are fixed is determined at runtime rather
> than at compile time.)
>
> This means, if I understand correctly, that you could for example create
> such functions in a loop (or, as we are talking about functional languages,
> in a recursive manner), which is quite difficult to achieve with static,
> compile-time functions. (I suppose you could try to emulate this in a
> statically typed language with no lambda functions, but you would need
> some kind of stack or something where the fixed parameter values are
> stored.)
>
> There are probably even deeper implications.
currying comes from Haskell Curry, the mathematician behind many further
lambda calculus concepts.
Here's the thing about the lambda calculus, which is at the kernel of
haskell the language: all the functions are one-argument functions that
return other one-argument functions. So, multiple argument functions
are actually just syntatic sugar for convenience. And yes, clearly
syntatic sugar is a good thing, as any competent C++ template writer can
attest.
Surely writing a function and letting the compiler handle all the
partial applications is much saner than writing yourself functions for
each possible partial application case. And no, I don't think in
haskell such functions are dynamically generated. Like I said, the
concept of one-argument functions is at the very heart of haskell: the
compiler breaks all functions down into one-argument functions, at
compile time.
Then again, in languages with default and keyword arguments you do not
need to worry about that, only to remember the argument names. Argument
position, names or order, though, can still shoot everyone in the foot.
--
a game sig: http://tinyurl.com/d3rxz9
Post a reply to this message
|
![](/i/fill.gif) |