Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Comment on

( #3333=superdoc: print w/replies, xml ) Need Help??

I am afraid you have it wrong. "Currying" and "higher-order functions" are two unrelated features that only have one thing in common: they often appear in functional languages. A function is "higher-order" if it accepts a function as it's parameter or if it returns a function (it "created").

Higher order functions are long supported by Perl 5, even though we usualy do not use that name. (I guess so that we do not scare people away. Higher-order functions sounds too "functional".)

sub Map { my $sub = shift(); my @new_arr; # want foreach my $item (@_) { push @new_arr, $sub->($item); } @new_arr; } sub foo {$_[0] + 1} @increased = Map \&foo, (1,2,3); print "@increased\n";
On the other hand a function is curried if it returns a "partialy applied" function if called with only the first few parameters. Of course then it is also higer-order actualy, but that's not the point.
sub Map { my $sub = shift(); if (@_) { # we are calling it normaly my @new_arr; # want foreach my $item (@_) { push @new_arr, $sub->($item); } return @new_arr; } else { # only the function is passed return sub { my @new_arr; # want foreach my $item (@_) { push @new_arr, $sub->($item); } return @new_arr; } } } sub foo {$_[0] + 1}; $inc = Map \&foo; @increased = $inc->(1,2,3); print "@increased\n";

(Next day) Actually ... the second function is not a good example. It's both curried and uncurried. If I wanted a plain curried version I'd define it as

sub Map { my $sub = shift(); return sub { my @new_arr; # want foreach my $item (@_) { push @new_arr, $sub->($item); } return @new_arr; } }
and then would call it either as
@incremented = Map(\&foo)->(1,2,3)
$Inc = Map(\&foo); @incremented = $Inc->(1,2,3)
As you can see the syntax is not too nice in Perl. Currying is a bit alien to Perl, it looks much more natural in modern functional languages.


In reply to Re: Re: Perl6 and Extreme Programming by Jenda
in thread Perl6 and Extreme Programming by Ovid

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?

    What's my password?
    Create A New User
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others lurking in the Monastery: (7)
    As of 2018-08-21 12:01 GMT
    Find Nodes?
      Voting Booth?
      Asked to put a square peg in a round hole, I would:

      Results (198 votes). Check out past polls.