【发布时间】:2021-05-10 22:19:50
【问题描述】:
我想添加一个计数器,以便查看迭代运行了多少次:
(define tolerance 0.01)
(define (close-enough? x y) (< (abs (- x y)) 0.001))
(define (fixed-point function starting-guess)
(define iter-count 0)
(define (evaluate num)
; these lines increment the counter using set!
(set! iter-count (+ iter-count 1))
(display iter-count) (display " - ") (display num) (display "\n")
(let ((next-num (function num)))
(if (close-enough? num next-num)
next-num
(evaluate next-num))))
(evaluate starting-guess))
(fixed-point cos 1.0)
这样做的正确方法是什么?目前我已经添加了define 和set!,因为我无法找到让let 工作的方法。有没有办法用let 做到这一点,或者建议的方法是什么?
或者,我想另一种方法是将其作为参数传递给迭代函数本身:
(define (fixed-point function starting-guess)
(define (evaluate num iteration-num)
(display iteration-num) (display " - ") (display num) (display "\n")
(let ((next-num (function num)))
(if (close-enough? num next-num)
next-num
(evaluate next-num (+ 1 iteration-num)))))
(evaluate starting-guess 0))
【问题讨论】:
标签: recursion scheme lisp sicp