Function Application is not Currying

Discussion in 'Python' started by Xah Lee, Jan 28, 2009.

  1. Xah Lee

    Xah Lee Guest

    Function Application is not Currying

    Xah Lee, 2009-01-28

    In Jon Harrop's book Ocaml for Scientist at
    http://www.ffconsultancy.com/products/ocaml_for_scientists/chapter1.html

    It says:

    Currying

    A curried function is a function which returns a function as its
    result.

    LOL. That is incorrect.

    Here are some examples of a function that returns a function as
    result, but is not currying.

    Mathematica example:

    f[n_]:=Function[n^#];
    f[7][2]
    (* returns 49 *)

    Emacs lisp example:

    (defmacro f (n) (list 'lambda (list 'x) (list 'expt n 'x) ) )
    (funcall (f 7) 2)

    Perl example:

    sub f {$n=$_[0]; sub { $n ** $_[0]} };
    print &{ f(7) } (2);

    Javascript example:

    function f(n) {return function (x) {return Math.pow(x,n);}; }
    alert (f(7) (2));

    In the above, a function returns a function, and the result function
    is applied to a value. They demonstrate 2 things:

    * The ability of the lang to have a function that returns a
    function.
    * The ability to apply a value (of type function) to a value.

    These, are 2 of the features that is part of often sloppily termed as
    “function as first class citizensâ€.

    However, the above are not languages that support currying, which is a
    feature that Haskell & Ocaml has.

    So what is Currying?

    Wikipedia article Currying said it best:

    In computer science, currying, invented by Moses Schönfinkel and
    Gottlob Frege, and independently by Haskell Curry,[1] is the technique
    of transforming a function that takes multiple arguments (or more
    accurately an n-tuple as argument) in such a way that it can be called
    as a chain of functions each with a single argument.

    Note how it says “is the technique of ...â€.

    To be more concrete, in the context of a given computer language, to
    say that it support curring, is to mean that the compiler understand
    the concept to certain degree. More to the point, the language is
    inherently able to take a function of more than one arg and
    deconstruct it to several functions of single arg.

    To say that function returning function is Currying, is a confusion of
    fundamental concepts.

    Mathematically, currying is the concept of deconstructing a function
    of multiple parameters to a composition of several functions all of
    arity 1.

    I like Jon, because i consider majority of his argument and
    perspective are more correct or sensible in his trollish spats in
    newsgroup fighting with tech geekers. But he is really a asshole, and
    take every chance to peddle his book. Every mother fucking
    opponitunity, he injects random opinion into discussions about how
    static typing or greatness of Microsoft, which paves a way for him to
    post a link to his book on Ocaml/F# or “study†or “speed comparisonâ€
    of his site. He does this repeatedly and intentionally, about every
    week for the past 2 or so years, and write in a way to provoke irate
    responses. In the past 2 or 3 years, i have for 2 or so times without
    his or anyone's solicitation, publically supported him in ugly
    newsgroup fights (such as some serious sounding post that accuse him
    of spamming or or some real life threats about network abuse).
    However, in the past year as i have had some debates on language
    issues with jon, i find Jon to be a complete asshole as far as his
    newsgroup demeanor goes.

    PS see also: A Mathematica Optimization Problem ( story of a thread
    where Jon started a fight with me )

    Perm url for this post:
    • Function Application is not Currying
    http://xahlee.org/UnixResource_dir/writ/apply_func_examples.html

    Xah
    ∑ http://xahlee.org/

    ☄
     
    Xah Lee, Jan 28, 2009
    #1
    1. Advertising

  2. Xah Lee

    Guest

    On Wed, 28 Jan 2009 13:32:29 -0800 (PST), Xah Lee <> wrote:

    >Function Application is not Currying
    >
    >Xah Lee, 2009-01-28
    >
    >In Jon Harrop's book Ocaml for Scientist at
    >http://www.ffconsultancy.com/products/ocaml_for_scientists/chapter1.html
    >
    >It says:
    >
    > Currying
    >
    > A curried function is a function which returns a function as its
    >result.
    >

    Curry, is that like chicken soup or some Indian mash?

    Why ? How about returning an index number into an array of function pointers
    as handlers from packet data?

    Oh, thats network communications.

    sln
     
    , Jan 28, 2009
    #2
    1. Advertising

  3. Xah Lee

    MRAB Guest

    wrote:
    > On Wed, 28 Jan 2009 13:32:29 -0800 (PST), Xah Lee <> wrote:
    >
    >> Function Application is not Currying
    >>
    >> Xah Lee, 2009-01-28
    >>
    >> In Jon Harrop's book Ocaml for Scientist at
    >> http://www.ffconsultancy.com/products/ocaml_for_scientists/chapter1.html
    >>
    >> It says:
    >>
    >> Currying
    >>
    >> A curried function is a function which returns a function as its
    >> result.
    >>

    > Curry, is that like chicken soup or some Indian mash?
    >

    "Currying" is named after someone called Curry. The 'correct' term is
    "partial parameterisation", which explains why it's often called
    "Currying" instead! :)

    > Why ? How about returning an index number into an array of function pointers
    > as handlers from packet data?
    >
    > Oh, thats network communications.
    >
     
    MRAB, Jan 28, 2009
    #3
  4. Xah Lee

    alex23 Guest

    On Jan 29, 7:32 am, Xah Lee <> wrote:
    > But he is really a asshole, and
    > take every chance to peddle his book.


    As opposed to really being an asshole and peddling one's website at
    every opportunity?
     
    alex23, Jan 29, 2009
    #4
  5. Xah Lee

    Kaz Kylheku Guest

    On 2009-01-28, Xah Lee <> wrote:
    > Function Application is not Currying


    That's correct, Xah. Currying is a special case of function application.
    A currying function is applied to some other function, and returns function
    that has fewer arguments.

    In some languages, you don't see the currying function. It's invisibly
    performed whenever you forget an argument. Hit a three argument function with
    only two arguments, and you don't get a nice ``insufficient arguments in
    function call'' error, but the call is diverted to the currying function, which
    gives you back a function of one argument, which you can then call with the
    missing argument to compute the original function.

    > Xah Lee, 2009-01-28
    >
    > In Jon Harrop's book Ocaml for Scientist at
    > http://www.ffconsultancy.com/products/ocaml_for_scientists/chapter1.html


    Figures you'd be reading this. Learning anything?

    > It says:
    >
    > Currying
    >
    > A curried function is a function which returns a function as its
    > result.
    >
    > LOL. That is incorrect.


    Yawn. Say it isn't so.
     
    Kaz Kylheku, Jan 29, 2009
    #5
  6. Xah Lee

    Russ P. Guest

    On Jan 28, 1:32 pm, Xah Lee <> wrote:
    > Function Application is not Currying
    >
    > Xah Lee, 2009-01-28
    >
    > In Jon Harrop's book Ocaml for Scientist athttp://www.ffconsultancy.com/products/ocaml_for_scientists/chapter1.html
    >
    > It says:
    >
    >     Currying
    >
    >     A curried function is a function which returns a function as its
    > result.
    >
    > LOL. That is incorrect.


    What does that have to do with the price of bananas in Costa Rica?
     
    Russ P., Jan 29, 2009
    #6
  7. Xah Lee

    Tim Greer Guest

    Russ P. wrote:

    > On Jan 28, 1:32 pm, Xah Lee <> wrote:
    >> Function Application is not Currying
    >>
    >> Xah Lee, 2009-01-28
    >>
    >> In Jon Harrop's book Ocaml for Scientist
    >> athttp://www......./chapter1.html
    >>
    >> It says:
    >>
    >> Currying
    >>
    >> A curried function is a function which returns a function as its
    >> result.
    >>
    >> LOL. That is incorrect.

    >
    > What does that have to do with the price of bananas in Costa Rica?


    Xah Lee does this stuff in 4 or 5 groups he's decided to post random
    things to. They rarely have any relevance or substance, just his
    personal thoughts. He liked to provoke arguing and tell everyone he's
    a genius in his own mind. It's best to just filter his posts out like
    most of us have already done. I don't know what group you're seeing
    his post in, but he bugs us in the Perl group all the time, cross
    posting things that have nothing to do with Perl (same with his cross
    posts to Python, too). :)
    --
    Tim Greer, CEO/Founder/CTO, BurlyHost.com, Inc.
    Shared Hosting, Reseller Hosting, Dedicated & Semi-Dedicated servers
    and Custom Hosting. 24/7 support, 30 day guarantee, secure servers.
    Industry's most experienced staff! -- Web Hosting With Muscle!
     
    Tim Greer, Jan 29, 2009
    #7
  8. Xah Lee

    Tim Greer Guest

    Jon Harrop wrote:

    > I had hoped someone else would correct you but they haven't. So...


    The lack of replies aren't about anyone correcting him or not, it's that
    the guy just posts anything he can to spamvertize his site and tell
    everyone how brilliant he thinks he is. It's just a method he uses to
    try and feel important and also get people to his site (and for the
    search engines to rank it higher). He's a known troll and spammer in a
    lot of groups due to this. The guy rarely has anything relevant to the
    groups he posts to. Most people I know of have come to just filter out
    his posts.
    --
    Tim Greer, CEO/Founder/CTO, BurlyHost.com, Inc.
    Shared Hosting, Reseller Hosting, Dedicated & Semi-Dedicated servers
    and Custom Hosting. 24/7 support, 30 day guarantee, secure servers.
    Industry's most experienced staff! -- Web Hosting With Muscle!
     
    Tim Greer, Jan 30, 2009
    #8
  9. Jon Harrop <> wrote:
    >I had hoped someone else would correct you but they haven't. So...


    That is because ...

    >Xah Lee wrote:


    .... everyone with more than 5 cents of brain has killfiled him a long
    time ago.

    jue
     
    Jürgen Exner, Jan 31, 2009
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Michael Spencer

    Black Magic - Currying using __get__

    Michael Spencer, Mar 24, 2005, in forum: Python
    Replies:
    0
    Views:
    392
    Michael Spencer
    Mar 24, 2005
  2. Giovanni Gherdovich
    Replies:
    2
    Views:
    284
    Giovanni Gherdovich
    Aug 18, 2008
  3. Kurian Thayil
    Replies:
    3
    Views:
    557
    Terry Reedy
    Jul 18, 2011
  4. Dave Angel
    Replies:
    8
    Views:
    283
    Ian Kelly
    Jul 19, 2011
  5. Xah Lee

    Function Application is not Currying

    Xah Lee, Jan 28, 2009, in forum: Perl Misc
    Replies:
    7
    Views:
    123
    Jürgen Exner
    Jan 31, 2009
Loading...

Share This Page