sub infix: (&f, &g) {
return sub ($x) {
return f(g($x));
};
}
####
sub test ($x) {
return $x ~ " test";
}
# outputs (&test !* &test) test test
say (&test !* &test)('&test !* &test');
####
# Fails with too much recursion
say (&test !* (&test !* &test))('&test !* &test !* &test');
####
my $p = &test !* &test;
my $q = $p !* &test;
# outputs $p = &test !* &test test
say $p('$p = &test !* &test');
#should be $p !* test test test (?), but says $p !* test test
say $q('$p !* &test');
####
function comp(f, g){
return function(x){
return f(g(x));
}
}
function test(x){
return x + " test";
}
print (comp(test,comp(test,test))("test "));
####
sub comp {
$f = shift;
$g = shift;
return sub {
$x = shift;
return $f->($g->($x));
};
}
sub test {
return (shift) . " test";
}
print comp(\&test, comp(\&test,\&test))->("test ");
####
sub comp {
my ($f, $g) = @_;
return sub {
my $x = shift;
return $f->($g->($x));
};
}
sub test {
return (shift) . " test";
}
print comp(\&test, comp(\&test,\&test))->("test ");