Another favorite higher order function of mine is right curry:
And these are nice function builders from Dylan.sub rcurry { my ($f, @args) = @_; return sub { $f->(@_, @args) }; } *company_name = &rcurry(\&wrap_with_html, "FoxTrotUniform Inc."); print company_name('B'); print company_name('I'); print company_name('H1');
And of course, if you really want to make your head spin, there is always combinators.sub conjoin { my ($f, $f2) = @_; return sub { $f->(@_) && $f2->(@_) } } sub disjoin { my ($f, $f2) = @_; return sub { $f->(@_) || $f2->(@_) } } *company_name_better = disjoin( conjoin( sub { return 1 if scalar @_ == 0 }, curry(\&company_name, 'H1') ), \&company_name ); print company_name_better('B'); print company_name_better();
In reply to Re: Specializing Functions with Currying
by stvn
in thread Specializing Functions with Currying
by FoxtrotUniform
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |