[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

What does DOTIMES mean?

   Date: 18 Nov 89  2121 PST
   From: Dick Gabriel <RPG@SAIL.Stanford.EDU>

   I believe that the output of the following is unspecified, am I wrong?

   (dolist (x (let ((a nil)) (dotimes (i 10 a) (push #'(lambda () i) a))))
     (print (funcall x)))

   I believe it can print either of the following (crlf's left out):

   10 10 10 10 10 10 10 10 10 10
   9 8 7 6 5 4 3 2 1 0

   and maybe even this:

   9 9 9 9 9 9 9 9 9 9

   I think there are valid reasons for each of the first two (the third is like the
   first). The first possibility is the straightforward implementation. The second
   possibility makes slightly more sense for a parallel processing system, because
   one can imagine writing this:

	   (dotimes (i n) (spawn (f i))

   If it takes a while for each process to get going, you might not get the
   values of i you expect unless the dotimes copies the binding.



This issue has been raised before, and I don't remember that it
was ever addressed.  Therefore I believe you are correct: it is