本日はSICP読書会

書いたソースとか

(define (count-leaves tree)
  (fold +
        0
        (map (lambda (x) (if (pair? x) (count-leaves x)
                             1))
             tree)))

(define (sum seq) (fold + 0 seq))

(define (dot-product v w)
  (sum (map * v w)))

(define (transpose mat)
  (fold-right (lambda (first rest)
                (if (null? rest) (map list first)
                    (map cons first rest)))
              '()
              mat))

(define (matrix-*-vect mat vec)
  (map (lambda (m) (dot-product m vec)) mat))

(define (matrix-*-matrix mat1 mat2)
  (map (lambda m1
         (map dot-product
              m1
              (transpose mat2)))
       mat1))
(define (matrix-+-matrix mat1 mat2)
  (map (lambda (x y) (map + x y))
       mat1
       mat2))

(define (reverse seq)
  (fold-right (lambda (x y) (append y (list x))) '() seq))
(define (reverse seq)
  (fold-left (lambda (x y) (cons x y)) '() seq))