>>614 Perl5、
>>624 を修正。
>>626 あら正規表現で書けちゃうのかイナ…
use feature qw{signatures say}; no warnings 'experimental';
sub A($m, $n) {
$m ? $n
? do{ my ($m2, $n2) = ($m-1, $n-1);
push @$l, "A($m2, "; push @$r, ')';
say @$l, "A($m, $n2)", @$r; A($m2, A($m, $n2)) }
: do{ my ($m2, $n2) = ($m-1, 1);
say @$l, "A($m2, $n2)", @$r; A($m2, $n2)}
: do{ my $s = $n + 1; say @$l, $s, @$r; pop @$l; pop @$r; $s };
}
($m, $n) = (2, 1);
say "A($m, $n)";
A($m, $n);
実行結果
$ perl 18_605_Ackermann_func.pl
A(2, 1)
A(1, A(2, 0))
A(1, A(1, 1))
A(1, A(0, A(1, 0)))
A(1, A(0, A(0, 1)))
A(1, A(0, 2))
A(1, 3)
A(0, A(1, 2))
A(0, A(0, A(1, 1)))
A(0, A(0, A(0, A(1, 0))))
A(0, A(0, A(0, A(0, 1))))
A(0, A(0, A(0, 2)))
A(0, A(0, 3))