Thats what you want?
my $sq = sub { $_[0]**2 };
my $id = sub { $_[0] };
sub sum {
my ($a,$b,$func) =@_;
$func //= $id;
my $sum;
$sum += $func->($_) for ($a..$b);
return $sum;
}
sub sum_sq{ sum($_[0],$_[1],$sq)}
$,=",";
print sum(3,5),sum_sq(3,5); # 12,50
I skipped the &next sub for integer stepping, but shouldn't be to difficult with a while loop checking $a<$b.
(UPDATE: I'm puzzled... if "&next" is necessary to get the next element of an iterator one must also provide a &cmp for checking $a<$b in the loop-condition)
Better avoid Lisp-recursion in Perl, when you can use "real" loops, we don't automatically optimize them to loops like Lisp does.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|