(defun next (x y) (/ (+ x y) 2))
(defun square (x) (* x x))
(defun sqrt-r(a b x)
(declare (optimize
(debug 3)
(speed 0)
(space 0)
(compilation-speed 0)
(safety 3)))
(format t "~A ~A ~A~%" a b x)
(let ((nex (next a b)))
(new-if (< (- b a) 0.00001)
nex
(if (> (square nex) x)
(sqrt-r a nex x)
(sqrt-r nex b x)))))
(defun new-if (predicate then-clause else-clause)
(cond (predicate then-clause)
(t else-clause)))
(step (sqrt-r 1.0 2.0 2.0))
这段程序会无限循环。要单步调试,需要加入下面这段程序,才能进入单步调试。
(declare (optimize
(debug 3)
(speed 0)
(space 0)
(compilation-speed 0)
(safety 3)))
在emacs中,输入C-x e,然后s是单步调试,v是查看程序运行到的源程序部分。其他命令C-h m就行了。