#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。原題...