User:Coderjoe/Sandbox2
Perl
<lang perl>use Math::Complex ':trig';
sub compose {
my ($f, $g) = @_; sub { $f -> ($g -> (@_)); };
}
my $cube = sub { $_[0] ** (3) }; my $croot = sub { $_[0] ** (1/3) };
my @flist1 = ( \&Math::Complex::sin, \&Math::Complex::cos, $cube ); my @flist2 = ( \&asin, \&acos, $croot );
print join "\n", map {
compose($flist1[$_], $flist2[$_]) -> (0.5)
} 0..2;</lang>
Perl 6
<lang perl6>sub compose (&g, &f) { return { g f $^x } }
my $x = *.sin; my $xi = *.asin; my $y = *.cos; my $yi = *.acos; my $z = * ** 3; my $zi = * ** (1/3);
my @functions = $x, $y, $z; my @inverses = $xi, $yi, $zi;
for @functions Z @inverses { say compose($^g, $^f)(.5) }</lang> Output:
0.5 0.5 0.5