Question

Dans Practical Common Lisp de Peter Seibel, il donne cet exemple:

(do ((nums nil) (i 1 (1+ i)))
    ((> i 10) (nreverse nums))
  (push i nums))

Je peux voir comment cela fonctionne, en utilisant des nombres à l'intérieur de la boucle mais sans lui donner de forme d'étape. Pourquoi voudriez-vous mettre nums dans la variable-definition plutôt que de faire ceci:

(let (nums) (do ((i 1 (+ i 1)))
         ((> i 10) (nreverse nums))
       (push i nums)))

Je suis sûr qu'il y a une bonne raison, mais je ne le comprends pas encore.

Était-ce utile?

La solution

Parce que cela est pratique et évite les indentations De plus, l'accumulateur appartient conceptuellement à la boucle, alors pourquoi ne pas le mettre là?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top