2008年10月14日火曜日

OpenLispでlet変数がstack-overflowする件

OpenLispでletで作った変数がstack-overflowしちゃいます。

↓stack-overflowする例


(defun testmem (a b)
(let ((aa a) (bb b))
(setq aa (+ aa 1))
(if (= aa 100)
(progn
(setq aa 0)
(setq bb (+ bb 1))))
(if (< bb 100)
(progn
(format (standard-output) " *** aa= ~S bb= ~S ~%" aa bb)
(testmem aa bb)))
))

(testmem 0 0)



↓stack-overflowしない例



(defun testmem (a b)
(setq a (+ a 1))
(if (= a 100)
(progn
(setq a 0)
(setq b (+ b 1))))
(if (< b 100)
(progn
(format (standard-output) " *** a= ~S b= ~S ~%" a b)
(testmem a b)))
)

(testmem 0 0)


違いは(let ((aa a) (bb b))があるかどうか、のみ。
前者は手元の環境(ver.8.8.0-win32-x86)では

前略



*** aa= 5 bb= 19
** eval : stack-overflow : nil
と終わります。


無駄なlet変数は使わないように > 自分

コメントを投稿