SICP習題解答1 1 1 8

2021-06-08 14:51:41 字數 2774 閱讀 4107

#lang racket

; exercise 1.1

10(+ 5 3 4)

(- 9 1)

(/ 6 2)

(+ (* 2 4) (- 4 6))

(define a 3)

(define b (+ a 1))

(+ a b (* a b))

(= a b)

(if (and (> b a) (< b (* a b)))ba)

(cond ((= a 4) 6)

((= b 4) (+ 6 7 a))

(else 25))

(+ 2 (if (> b a) b a))

(* (cond ((> a b) a)

((< a b) b)

(else -1))

(+ a 1))

; exercise 1.2

(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2) (- 2 7)))

; exercise 1.3

(display "\nexercise 1.3\n")

(define (sum-of-bigger a b c)

(cond ((and (<= a b) (<= a c)) (+ b c))

((and (<= b a) (<= b c)) (+ a c))

(else (+ a b))))

(sum-of-bigger 1 1 2)

; exercise 1.4

(define (a-plus-abs-b a b)

((if (> b 0) + -) a b)) ;; 運算子可以作為值返回,所以這裡的if語句求值結果為+/-,然後再計算

(a-plus-abs-b 32 -12)

(a-plus-abs-b 32 12)

; exercise 1.5

(define (p) (p))

(define (test x y)

(if (= x 0)

0y))

(test 0 (p))

;; 如果是正則序求值,先代入再計算,則結果為0;如果是應用序求值,先計算引數值後再代入,所以上述**(p)不停得呼叫自身,無法終止

;; drracket採用的是應用序,死迴圈

#lang racket

(define (sqrt x)

(sqrt-iter 1.0 x))

(define (sqrt-iter guess x)

(if (good-enough? guess x)

guess

(sqrt-iter (improve guess x) x)))

(define (good-enough? guess x)

(< (abs (- (square guess) x)) 0.001))

(define (square x)

(* x x))

(define (improve guess x)

(/ (+ guess (/ x guess)) 2))

;; exercise 1.6

(define (new-if predicate then-clause else-clause)

(cond (predicate then-clause)

(else else-clause)))

(define (new-if-sqrt x)

(new-if-sqrt-iter 1.0 x))

(define (new-if-sqrt-iter guess x)

(new-if (good-enough? guess x)

guess

(new-if-sqrt-iter (improve guess x) x)))

;; 和1.5一樣的問題,在應用序求值中會先求值再代入,new-sqrt-iter沒法終止,直到棧溢位

;; exercise 1.7

(define (improved-sqrt x)

(improved-sqrt-iter 1.0 0.1 x))

(define (improved-sqrt-iter guess old-guess x)

(if (improved-good-enough? guess old-guess x)

guess

(improved-sqrt-iter (improve guess x) guess x)))

(define (improved-good-enough? guess old-guess x) ;; 修改good-enough的判斷條件

(< (abs (- guess old-guess)) (abs (* old-guess 0.001))))

;; exercise 1.8

(define (curt x)

(curt-iter 1.0 0.1 x))

(define (curt-iter guess old-guess x)

(if (improved-good-enough? guess old-guess x)

guess

(curt-iter (cu-improve guess x) guess x)))

(define (cu-improve y x) ;; 只需修改improve過程,其他不需要改變

(/ (+ (/ x (square y)) (* 2 y)) 3))

SICP習題解答2 7 2 16

lang racket exercise 2.7 define make interval a b cons a b define upper bound interval max car interval cdr interval define lower bound interval min c...

SICP習題解答2 17 2 23

lang racket exercise 2.17 define last pair l cond null?l null null?cdr l l else last pair cdr l last pair list 23 72 149 34 last pair 1 last pair exer...

SICP習題1 6的解答

sicp就是名著 structure and interpretation of computer programs 著名的巫師書 wizard book 和紫書 purple book 雖說英文原版可以從網上合法 中文版翻譯也還不錯。閒話少敘,下面我們研究一下書中 1.1.7節的練習題1.6。原題...