SICP練習 84 練習2 56

2021-06-28 22:55:01 字數 1311 閱讀 7486

這道題的**略長啊。不過我也是因此而知道edwin上的**居然可以複製到word上,以前還想當然的以為不能複製的,畢竟在edwin上貼上用的ctrl+y,而不是ctrl+v。在這裡我就只將書上沒有的**貼出來了。

(define

(deriv exp var)

(cond

((number?

exp)

0)((variable? exp)

(if (same-variable? exp var)

10))

((sum? exp)

(make-sum

(deriv

(addend exp) var)

(deriv

(augend exp) var)))

((product? exp)

(make-sum

(make-product

(multiplier exp)

(deriv

(multiplicand exp) var))

(make-product

(deriv

(multiplier exp) var)

(multiiplicand exp))))

((exponentiation? exp)

(let

((n(exponent exp))

(u(base exp)))

(make-product n (make-product

(make-exponentiation u (-

u1))

(deriv u var)))))

(else

(error

"unknown expression type -- deriv" exp))))

(define

(make-exponentiation base exponent)

(cond

((=exponent0)

1)((=

exponent1)

base)

(else

(list

'** base exponent))))

(define

(exponentiation? x)

(and

(pair? x)

(eq?

(car x) '**)))

(define

(base exp)

(cadr exp))

(define

(exponent exp)

(caddr exp))

SICP練習 7 練習1 11

這種題目太像是數學題目了,不過拿到程式設計上又有一些的難度。我們先根據題目中的條件,寫出類似於第 25頁最下面的變換規則。我們先列出如下內容 a f n 1 f 2 f 3 f 4 f 5 b f n 2 f 1 f 2 f 3 f 4 c f n 3 f 0 f 1 f 2 f 3 於是繼而得出下...

SICP練習 12 練習1 18

練習1.8 和前兩題一樣,依舊是只能用對數步數。而且這個迭代過程要基於加 加倍和折半運算。這乙個習題要用到前面的函式,因此最好的做法是,每次都將寫好的 儲存起來。load test1.18.scm 這行 可以用來載入 而儲存可以用c x,c w。以下是該題的 這次我們寫成塊結構 define x y...

SICP練習 17 練習1 23

練習1.23 首先我們按照題目要求來寫出相應的next函式,然後再修改find divisor函式。define next x if x 2 3 n 2 define find divisor ntest divisor cond square test divisor n n divides?te...