Files
devops/perl/Examples/Chap7/Curry.pm
2025-09-17 16:08:16 +08:00

48 lines
650 B
Perl

###
### Curry.pm
###
## Chapter 7 section 2.1
package Curry;
use base 'Exporter';
@EXPORT = ('curry');
@EXPORT_OK = qw(curry_listfunc curry_n);
sub curry_listfunc {
my $f = shift;
return sub {
my $first_arg = shift;
return sub { $f->($first_arg, @_) };
};
}
sub curry {
my $f = shift;
return sub {
my $first_arg = shift;
my $r = sub { $f->($first_arg, @_) };
return @_ ? $r->(@_) : $r;
};
}
1;
## Chapter 7 section 2.3
sub curry_n {
my $N = shift;
my $f = shift;
my $c;
$c = sub {
if (@_ >= $N) { $f->(@_) }
else {
my @a = @_;
curry_n($N-@a, sub { $f->(@a, @_) });
}
};
}