SICP勉強会に参加しています

勉強会入り口

cotocotoのアナウンス → http://cotocoto.jp/event/25200
lingrGauche and SICP 勉強会@関西
ustreamemaame
いつの間にか開始時間が12:30から13:00に変更になった模様。以下に解いた練習問題を貼っておきます。
問題1.3

(define (f1.3 a b c)
  (cond ((or (< a b c) (< a c b)) (sum-of-squares b c))
	((or (< b a c) (< b c a)) (sum-of-squares a c))
	(else (sum-of-squares a b))))

gosh> (map (lambda (x) (apply f1.3 x)) '((1 2 3) (1 3 2) (2 1 3) (2 3 1) (3 1 2) (3 2 1)))
(13 13 13 13 13 13)

問題1.7

(define (square x) (* x x ))

(define (average x y)
  (/ (+ x y) 2))
  
(define (my-sqrt x)
  (define (sqrt-iter pre-guess guess)
    (if (good-enough? pre-guess guess)
	guess
	(sqrt-iter guess (improve guess))))
  
  (define (improve guess)
    (average guess (/ x guess)))
  
  (define (good-enough? pre-guess guess)
    ; #?=(list pre-guess guess)
    (< (abs (- (abs (- (square pre-guess) x))
	       (abs (- (square guess) x))))
       (/ x 1000)))

  (sqrt-iter x 1.0))

問題1.8

(define (square x) (* x x ))

(define (cubert x)
  (define (cubert-iter pre-guess guess)
    (if (good-enough? pre-guess guess)
	guess
	(cubert-iter guess (improve guess))))
  
  (define (improve guess)
    (/ (+ (/ x (square guess))
	  (* 2 guess))
       3))
  
  (define (good-enough? pre-guess guess)
    ; #?=(list pre-guess guess)
    (< (abs (- (abs (- (square pre-guess) x))
	       (abs (- (square guess) x))))
       (/ x 1000)))

  (cubert-iter x 1.0))