ねおきSICP

昨日は肩こりがひどくて頭痛がやばかったのでビタミン剤を買ってきて飲んだのです
マルチ+ミネラルとビタミンEと喫煙者なのでビタミンC
寝て起きたら肩こり軽減でびっくりした。欠乏してたのね。
肩こりならビタミンを摂取しませう。ビタミンEがオススメ。
サロンパスより肌に負担掛けないし匂いもない。
ビタミンEの錠剤は瑪瑙の様でうつくしー。

;;;1.1.2
(define pi 33)
(define cu (* pi pi))
cu
;;;q1.1
10
(+ 5 3 4)
(/ 6 2)
(+ (* 2 4) (- 4 6))
(define a 3)
(define b
  (+ a 1)
)
(+ a b (* a b ))
(if (and (> b a) (< b (* a b)))
  b
  a
)

;;;q1.2
(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2) (- 2 7)))
;;前置しきって案外そのまま書き下せるのねという感想を持ったよ

;;;q1.3
(define (twice-sum_big2of3 a b c)
  (cond
       ((and (<= a b) (<= a c) )   (+ (* b b) (* c c)));aが最小の時
       ((and (<= b c) (<= b a) )   (+ (* a a) (* c c)));bが最小の時
       (else  (+ (* a a) (* b b))))
)
(twice-sum_big2of3 1 2 3)
(twice-sum_big2of3 2 1 3)
(twice-sum_big2of3 3 2 1)
;ok

;;;q1.4
(define (a-plus-abs-b a b)
  ((if (> b 0);bがposiなら演算子は+=>(+ a b)
    +
    -);bがnegaなら演算子は-=>(- a b)
    a b)
  )
(a-plus-abs-b 1 2)
(a-plus-abs-b 1 -2)
(a-plus-abs-b -1 -2)

;;;q1.5
(define (p)  (p))
(define (test x y)
  (if (= x 0)
    0
    y
)
)
(test 0 (p))
(test 1 (p))

;;;q1.8
;;ニュートン法ってなに?my-sqrt xとguessの平均を順次とってok_detail?で認められる精度ならループを抜ける
;;絶対値メーカー
(define (abs x)  (if (< x 0) (* -1 x) x))
                                        ;(abs -1)
                                        ;(abs 1)

;;2乗メーカー
(define (make2wise x) (* x x))
                                        ;(make2wise 12)

;;3乗メーカー
(define (make3wise x) (* x x x))
                                        ;(make3 1.0)
                                        ;(make3 2.0)

;;精度チェッカー
(define (ok_detail? guess x proc)
  (>= seido (abs (- (proc guess) x)))
  )
                                        ;(abs (- (* 1.0 1.0) 3.0))
                                        ;(> (abs (- (* 1.0 1.0) 3.0)) 0.1)
                                        ;(ok_detail? 1.73 3)
                                        ;(ok_detail? 2.999 27.0 make3wise)

;;引数メーカー
;;2乗 imp2
;; 近似値g 対象x ((x/g)+g)/2
(define (imp2 g x)
  (* 0.5 (+ (/ x g) g))
  )
                                        ;(imp2 1.0 2.0)
                                        ;(imp2 1.3 2.0)
                                        ;(imp2 1.4 2.0)
;;3乗 imp3 
;; (x/(g*g)+2g)/3
(define (imp3 g x)
  (/
   (+
    (/ x (* g g))
    (* 2 g)
    )
   3)
  )
                                        ;(imp3 1 9.0)

;;計算精度 「オーナインシステムとはよく言った物ね」準拠....ねぼけてる!
(define seido 0.0000000001)
                                        ;seido

;; 関数
(define (my-sqrt3arg guess x proc)
  (if (ok_detail? guess x proc)
      guess
      (my-sqrt3arg (imp2 guess x) x proc))
  )

                                        ;(my-sqrt2 1.0 3.0 make2wise)

(define (my-sqrt guess x proc_imp proc)
  (if (ok_detail? guess x proc)
      guess
      (my-sqrt (proc_imp guess x) x proc_imp proc))
  )

;;取りもとりあえず手向山trace
(require (lib "trace.ss"))
(trace my-sqrt)
(trace my-sqrt2)
                                        ;(my-sqrt 1 2.0  imp2 make2wise)
                                        ;(my-sqrt 1 27.0 imp3 make3wise)


;;;q1.7
;;数値がでかいと処理が終わらないし、数値が小さいと誤差修正がうまくいかない
;;精度部分を離れている具合で見ればいいのかもと思った
;;それってどんな計算やねん
;;どうでもいいけど損益計算の利益安全率の計算の意味とかちょっと分かった気がした。
;;数値で表されても見えないって事なんだろう。
;;でもlogがやっぱり感覚できん
(define (ok_detail_per? guess x proc)
  (>=
   seido
   (/
    (abs (- (proc guess) x)) ;離れ値
    x) ;離れ度
   );誤差との比較 #t or #f
  )
(ok_detail_per? 1 2 make2wise)
(define (my-sqrt_per guess x proc_imp proc)
  (if (ok_detail_per? guess x proc)
      guess
      (my-sqrt_per (proc_imp guess x) x proc_imp proc))
  )
(trace my-sqrt_per)
;(my-sqrt_per 1 270000.0  imp3 make3wise)
;(my-sqrt 1 270000.0  imp3 make3wise)