我一直在研究在 Perl 6 中构建惰性列表的各种方法,我想收集所有描述斐波那契数列的简明方法。
我将从masak日记中的三个开始:
my @fibs := (0, 1, -> $a, $b { $a + $b } ... *);
my @fibs := (0, 1, { $^a + $^b } ... *);
my @fibs := (0, 1, *+* ... *);
我在想这样的事情也可以,但我认为我的语法错误:
my @fibs := (0, 1, (@fibs Z+ @fibs[1..*]));
有什么东西很急切(切片?)并导致 Rakudo 进入无限循环。这是对 Haskell 定义的翻译:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
更新:
似乎该zipWith
示例的问题在于@fibs[1..*]
切片。iftail
定义为sub tail (@x) {my $i = 1; {@x[$i++]}...*}
then 它可以正常工作。我很想知道熟悉 Rakudo 内部结构的人为什么不偷懒。
另一个不错的是:
my @fibs := (0, [\+] 1, @fibs);