昼下がりSICP

ちょっと楽しい

;;; 1.3.4 値として返される手続き
(define (average  a b)
  (/ (+ a b) 2)
)
(define (square  a)
  (* a a)
)
(define (average-dump f)
  (lambda (x)
    (average x (f x))))
((average-dump square) 10)

;;; q1.41
(define (double f)
  (lambda (x)
    (f (f x))
     )
)
(define (inc n)
  (+ 1 n)
)
;;((double inc) 1)

;;; q1.42
(define (compose soto naka)
  (lambda (x)
    (soto (naka x))
    )
  )
((compose square inc) 6)
(define (repeated f times)
  (if (< times 1)
      (lambda (x) x)
      (compose f (repeated f (- times 1)))
      )
  )
;;ここに経過
(define (repeba f times)
  (lambda (x)
    (f (f x))
    )
  )
(define (repeba f times)
  (compose f f)
  )
(define (repeba f times)
  (if (<= times 0)
      (lambda (x) (+ x 0))
      (compose f f)  
      )
  )
(define (repeba f times)
  (if (<= times 0)
      (lambda (x) (+ x 0))
      (compose f (repeba f (- times 1)))
      )
  )
(define (repeba f times)
  (if (< times 1)
      (lambda (x) x)
      (compose f (repeba f (- times 1)))  
      )
  )
;;こうやって作った
;;抽象的なところをいきなり考えれなかったので補正していく方法で
;;いったらなんか良い感じ。少しずつ進めるから安心だし。
;;((repeated square 2) 5)
;;((repeba square 2) 5)

やっと1章おわりますた