Lisp DO raisonnement à syntaxe variable
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.
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