在 Perl 6 中描述斐波那契数列有多少种方法?

2024-02-10

我一直在研究在 Perl 6 中构造惰性列表的各种方法,并且我想收集所有描述斐波那契数列的简洁方法。

我将从以下三个开始masak http://use.perl.org/~masak/journal/的日记:

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)

Update:

似乎有问题zipWith例子是@fibs[1..*]片。如果tail定义为sub tail (@x) {my $i = 1; {@x[$i++]}...*}然后它就可以正常工作了。我很想知道为什么切片对于熟悉 Rakudo 内部结构的人来说并不懒惰。

另一个不错的是:

my @fibs := (0, [\+] 1, @fibs);

最短的好像是

my @fibs := ^2,*+*...*;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Perl 6 中描述斐波那契数列有多少种方法? 的相关文章

随机推荐