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.

Foi útil?

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
scroll top