Wie viele Möglichkeiten gibt es, die Fibonacci-Sequenz in Perl 6 zu beschreiben?

Ich habe mir die verschiedenen Möglichkeiten zum Erstellen von Lazy Lists in Perl 6 angesehen und möchte alle prägnanten Möglichkeiten zur Beschreibung der Fibonacci-Sequenz zusammenfassen.

Ich beginne dies mit den drei von masak 's Tagebuch:

my @fibs := (0, 1, -> $a, $b { $a + $b } ... *);

my @fibs := (0, 1, { $^a + $^b } ... *);  

my @fibs := (0, 1, *+* ... *);

Ich dachte, so etwas würde auch funktionieren, aber ich denke, ich habe die Syntax falsch:

my @fibs := (0, 1, (@fibs Z+ @fibs[1..*]));

Etwas ist da eifrig (die Scheibe?) Und veranlasst Rakudo, in eine Endlosschleife einzutreten. Es ist eine Übersetzung der Haskell-Definition:

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

Aktualisieren

Scheint das Problem mit demzipWith Beispiel ist das@fibs[1..*] Scheibe. wenntail ist definiert alssub tail (@x) {my $i = 1; {@x[$i++]}...*} dann funktioniert es einwandfrei. Mich würde interessieren, warum die Scheibe von niemandem, der mit Rakudos Interna vertraut ist, nicht faul ist.

Eine andere schöne ist:

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage