我正在SICP的练习1.6中重写示范案例
#+begin_src emacs-lisp :session sicp :results output
(defun sqrt(x)
(sqrt-iter 1.0 x))
(defun sqrt-iter(guess x)
(if (good-enough-p guess x)
guess
(sqrt-iter (improve guess x)
x)))
(defun good-enough-p(guess x)
(< (abs (- (square guess) x)) 0.001))
(defun improve(guess x)
(average guess (/ x guess)))
(defun average(x y)
(/ (+ x y) 2))
#+end_src
它可以正常工作并获得输出
#+begin_src emacs-lisp :session sicp :lexical t :results output
(print (sqrt 11))
(print (sqrt (+ 100 37)))
(print (sqrt (+ (sqrt 2) (sqrt 3))))
#+end_src
#+RESULTS:
:
: 3.3166248052315686
:
: 11.704699917758145
:
: 1.7739279023207892
因此进入练习1.6,用cond
重写了它>
#+begin_src emacs-lisp :session sicp :lexical t (defun sqrt-iter-cond(guess x) (cond ((good-enough-p guess x) guess) (t (sqrt-iter-cond (improve guess x) x)) ) ) (sqrt-iter-cond 1 10) #+end_src
它报告错误:
ob-async-org-babel-execute-src-block: Lisp nesting exceeds ‘max-lisp-eval-depth’
[阅读了各种说明之后,我陷入了更多的困惑,甚至引起了隐含的恐惧,他们害怕使用
cond
后缀。因为这显然是逻辑上正确的。
请提供任何提示吗?
我正在SICP的练习1.6中工作,该练习重写了演示案例#+ begin_src emacs-lisp:session sicp:results输出(defun sqrt(x)(sqrt-iter 1.0 x))(defun sqrt-iter(guess x)(如果(...
cond
版本没有任何问题,从一个空的缓冲区开始并尝试它,它将起作用: