エラー。

珍しくエラーを吐いたのでメモ。

(defun xn ()
  (let ((tb (make-hash-table)))
	(dotimes (a 10000 tb)
;	  (do-events)  ;これが必要。
	  (let* ((p (f))
			 (n (gethash p tb)))
		(setf (gethash p tb) (if n (1+ n) 1))))))

(defun f ()
  (let ((p 0))
	(dotimes (- 20 p)
	  (if (< 0.4 (random 1.0)) (incf p)))))

(progn
  (compile 'xn)
  (compile 'f)
  (xn))

こんな物を書いていて、それほど重い処理でもないのにエラーが起きた。dotimesを入れ子にして用いるときは(do-events)を入れた方が無難なようである。他のプログラムとの兼ね合いもあるのかも知れない。

追記

もう少し余分な物が付け足したら(do-events)を補ってもエラーが起きた。原因は良く分からない。


ログによると

c0000005: Access violation
at 00428290 (xyzzy.exe!.text)

とのことだが・・・。