LISP SICP 视频讲座 2a 平均潮湿问题

标签 lisp scheme sicp

在下面的代码中,我试图理解变量 whatami 如何获取其值。按照逻辑,我看到过程 (lambda (y) (/x y)) 是我传递给方法 average-damp 的参数,并且是在该方法中表示为变量 f。似乎需要执行 (/x y)(average (f Whatami) Whatami) ,但我无法弄清楚执行的顺序。如有任何帮助,我们将不胜感激。

(define (average x y)
  (/ (+ x y) 2))

(define (fixed-point f start)
  (define tolerance 0.00001)
  (define (close-enuf? u v)
    (< (abs (- u v)) tolerance))
  (define (iter old new)
    (if (close-enuf? old new)
        new
        (iter new (f new))))
  (iter start (f start)))

(define average-damp
  (lambda (f)
    (lambda (whatami) (average (f whatami) whatami))))

; square root with average damping
(define (_sqrt x)
  (fixed-point
   (average-damp (lambda (y) (/ x y)))
   1))

(_sqrt 4.0)

最佳答案

average-damp 过程将过程作为其参数并返回过程作为其值。当给定一个接受一个参数的过程时,average-damp 返回另一个过程,该过程计算将原始函数 f 应用于其参数之前和之后的值的平均值。它位于定点过程中,返回的函数被应用(迭代)。

因此,average-damp 过程根本不执行 (/x y)(average(f Whatami) Whatami) ,它只是使用传递给它的函数来创建它返回的新函数。

关于LISP SICP 视频讲座 2a 平均潮湿问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6645428/

相关文章:

lisp - "unfold"用于常见的 lisp?

scheme - 字符串分割以保留字符串中的逗号

lisp - "Structure and Interpretation of Computer Programs"封面图到底在讲什么?

python - 有什么工具可以将 Lisp 代码翻译成 Python 吗?

error-handling - 嵌入式 ECL lisp 错误处理

function - LISP 编写一个名为 cut-in-half 的函数,它接收一个列表并创建一个新列表,其元素是前半部分和后半部分

scheme - Racket 方案 - 将字符流写入文件

lisp - 报告 LISP 中的错误

installation - 在 Windows 10 上安装 MIT Scheme -- 'Requested Allocation is too large'

scheme - 为什么我对 SICP 练习 1.3 的解决方案不起作用?