高階関数いいわぁ

抽象とモジュール化ってことか。脊髄反射でぽst。
継承/インターフェースとかと同じパラダイムなのね
関数の引数に関数を指定すること。schemeだと手続きと変数とは全く同じ扱いだからかなりシームレス。

;;普通版
(define (sum-integers a b)
  (if (> a b)
      0
      (+ a (sum-integers (+ a 1) b))))

(define (cube x) (* x x x ))
(define (sum-cubes a b)
  (if (> a b)
      0
      (+ (cube a) (sum-cubes (+ a 1) b))))


;;高階
;;高階関数の親?って言うのかしら
;;合計する関数
(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a)
         (sum term (next a) next b))))

;;インクリ(next b)を作って
(define (inc n) (+ n 1))


(define (identity x) x)
;;高階にはめ込み
(define (sum-integers a b)
  (sum identity a inc b))
;;使ってみるー>おk
;: (sum-integers 1 10)

;;高階関数にはめ込み
(define (sum-cubes a b)
  (sum cube a inc b))
      ;;↑ここ ↑
;;使ってみるー>おk
;: (sum-cubes 1 10)

何でも足せるsum関数ってことらしい。
いやはや楽しい。