J'ai regardé les différentes manières de construire des listes paresseuses dans Perl 6 et je voudrais rassembler toutes les manières concises de décrire la séquence de Fibonacci.Combien de façons y a-t-il de décrire la séquence de Fibonacci dans Perl 6?
Je vais commencer cette large avec les trois de la revue de masak:
my @fibs := (0, 1, -> $a, $b { $a + $b } ... *);
my @fibs := (0, 1, { $^a + $^b } ... *);
my @fibs := (0, 1, *+* ... *);
Je pensais quelque chose comme ça fonctionnerait aussi, mais je pense avoir la mauvaise syntaxe:
my @fibs := (0, 1, (@fibs Z+ @fibs[1..*]));
Quelque chose là-bas est impatient (la tranche?) Et fait entrer Rakudo dans une boucle infinie. Il est une traduction de la définition Haskell:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Mise à jour:
On dirait que le problème avec le zipWith
exemple est la tranche @fibs[1..*]
. si tail
est défini comme sub tail (@x) {my $i = 1; {@x[$i++]}...*}
alors cela fonctionne correctement. Je serais curieux de savoir pourquoi la tranche n'est pas paresseuse de quiconque est familier avec les internes de Rakudo.
Une autre belle est un:
my @fibs := (0, [\+] 1, @fibs);
Ceci est l'une des raisons pour lesquelles j'aime Perl 6. :) Est-ce –
la question au sujet de votre bug, ou au sujet de possibles autres solutions? Votre code manque une parenthèse fermante, si la syntaxe de Perl 6 n'est pas plus étrange que je ne le pensais ... –
Avez-vous essayé votre code sur des roquets? –