↓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変数は使わないように > 自分
0 件のコメント:
コメントを投稿