Explique uma peculiaridade de avaliação preguiçosa

Eu estou lendo o livro de Hadley Wickhams no Github, em particularesta parte na avaliação preguiçosa. Lá ele dá um exemplo das conseqüências da avaliação preguiçosa, na parte comadd/adders funções. Deixe-me citar esse bit:

Isso [avaliação lenta] é importante ao criar closures com lapply ou loop:

add <- function(x) {
  function(y) x + y
}
adders <- lapply(1:10, add)
adders[[1]](10)
adders[[10]](10)

x é avaliado preguiçosamente na primeira vez que você chama uma das funções somador. Neste ponto, o loop está completo e o valor final de x é 10. Portanto, todas as funções somador adicionarão 10 à sua entrada, provavelmente não o que você queria! Forçar manualmente a avaliação corrige o problema:

add <- function(x) {
  force(x)
  function(y) x + y
}
adders2 <- lapply(1:10, add)
adders2[[1]](10)
adders2[[10]](10)

Eu não pareço entender isso, e a explicação é mínima. Alguém poderia, por favor, elaborar esse exemplo específico e explicar o que acontece lá? Estou especificamente confuso com a frase "neste ponto, o loop está completo e o valor final de x é 10". Qual laço? Qual o valor final, onde? Deve ser algo simples Estou perdendo, mas eu simplesmente não vejo isso. Muito obrigado antecipadamente.

questionAnswers(2)

yourAnswerToTheQuestion