Сколько существует способов описать последовательность Фибоначчи в Perl 6?
Я рассмотрел различные способы построения отложенных списков в Perl 6 и хотел бы собрать все краткие способы описания последовательности Фибоначчи.
Я начну это с трех изМАСАКЖурнал:
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);