Я рассматривал различные способы создания отложенных списков в 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..*]));
Что-то там есть (ломтик?) И заставляет Ракудо войти в бесконечный цикл. Это перевод определения Haskell:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Обновление:
Похоже, проблема с примером zipWith
- это срез @fibs[1..*]
. если tail
определен как sub tail (@x) {my $i = 1; {@x[$i++]}...*}
, то он работает правильно. Мне было бы интересно узнать, почему ломтик не ленится от тех, кто знаком с внутренностями Ракудо.
Еще один приятный:
my @fibs := (0, [\+] 1, @fibs);