灯下 登录
计算机科学 / SICP / 5.1.2 Abstraction in Machine Design

Exercise 5.3 · 习题

Exercise 5.3: Design a machine to compute square
roots using Newton’s method, as described in 1.1.7:

(define (sqrt x)
(define (good-enough? guess)
( (abs (- (square guess) x)) 0.001))
(define (improve guess)
(average guess (/ x guess)))
(define (sqrt-iter guess)
(if (good-enough? guess)
guess
(sqrt-iter (improve guess))))
(sqrt-iter 1.0))

Begin by assuming that good-enough? and improve operations are

available as primitives. Then show how to expand these in terms of arithmetic

operations. Describe each version of the sqrt machine design by drawing

a data-path diagram and writing a controller definition in the register-machine

language.

练习 5.3:如 1.1.7 节所述,设计一台用牛顿法计算平方根的机器:

(define (sqrt x)
(define (good-enough? guess)
( (abs (- (square guess) x)) 0.001))
(define (improve guess)
(average guess (/ x guess)))
(define (sqrt-iter guess)
(if (good-enough? guess)
guess
(sqrt-iter (improve guess))))
(sqrt-iter 1.0))

先假设 good-enough? 和 improve 操作作为基本操作已经可用,然后说明如何将它们展开为算术操作。用数据通路图和寄存器机器语言中的控制器定义来描述每个版本的 sqrt 机器设计。

Racket #lang sicp
(define (sqrt x)
 (define (good-enough? guess)
 ( (abs (- (square guess) x)) 0.001))
 (define (improve guess)
 (average guess (/ x guess)))
 (define (sqrt-iter guess)
 (if (good-enough? guess)
 guess
 (sqrt-iter (improve guess))))
 (sqrt-iter 1.0))