【发布时间】:2019-02-09 19:14:12
【问题描述】:
这符合我的预期。 fib(13) 返回 233。
sub fib(Int $a --> Int) {
return 0 if $a == 0;
return 1 if $a == 1;
return fib($a -1) + fib($a -2);
}
my $square = -> $x { $x * 2 }; # this works with no return value
my @list = <1 2 3 4 5 6 7 8 9>.map( $square );
# returns [2 4 6 8 10 12 14 16 18]
我尝试使用匿名子实现 fib()
my $fib = -> Int $x --> Int {
return 0 if $x == 0;
return 1 if $x == 1;
return $fib($x - 1) + $fib($x - 2);
}
$fib(13)
使用显式返回运行时出现以下错误。
尝试在任何例程之外返回 在 test.p6 第 39 行的块中
所以我去掉了返回值。
my $fib = -> Int $x --> Int {
0 if $x == 0;
1 if $x == 1;
$fib($x - 1) + $fib($x - 2);
}
say $fib(13);
最后一个版本永远不会返回。有没有办法写一个没有返回值的匿名递归函数?
【问题讨论】:
-
注意可以使用
&?BLOCK来引用当前块,这样就可以调用了。-> Int $_ --> Int { when 0 {1}; when 1 {1}; &?BLOCK($_-1) + &?BLOCK($_-2) }
标签: raku