Lisp DO raciocínio sintaxe variável
Pergunta
O In Peter Seibel Practical Common Lisp , ele dá este exemplo:
(do ((nums nil) (i 1 (1+ i)))
((> i 10) (nreverse nums))
(push i nums))
Eu posso ver como ele funciona, usando nums dentro do loop, mas não dando-lhe uma forma passo. Por que você colocou nums na variável-definição, em vez de fazer isso:
(let (nums) (do ((i 1 (+ i 1)))
((> i 10) (nreverse nums))
(push i nums)))
Eu tenho certeza que há uma razão boa, mas eu não entendo ainda.
Solução
Porque é conveniente e economiza recuo. Além disso, o acumulador pertence conceitualmente ao lacete, então por que não colocá-lo lá?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow