1.3 高階手続きによる抽象
gosh> (define (cube x) (* x x x)) cube gosh> (cube 3) 27
強力なプログラム言語への要請の一つは, よくあるパターンに名前をつけて抽象化し, その抽象を直接使って仕事をする能力である
手続きを引数としてとり, 手続きを値として返す手続きが構成→高階手続き
1.3.1 引数としての手続き
(define (sum-integers a b) (if (> a b) 0 (+ a (sum-integers (+ a 1) b)))) sum-integers gosh> (sum-integers 1 2) 3 gosh> (sum-integers 1 40) 820 gosh> (sum-integers 1 10) 55
級数の総和
1.3.2 lambdaを使う手続きの構築
letとかlambdaとかを使う。
(define (f x y) (define (f-helper a b) (+ (* x (square a)) (* y b) (* a b))) (f-helper (+ 1 (* x y)) (- 1 y)))
が、
(define (f x y) ((lambda (a b) (+ (* x (square a)) (* y b) (* a b))) (+ 1 (* x y)) (- 1 y)))
になり、さらに
(define (f x y) (let ((a (+ 1 (* x y))) (b (- 1 y))) (+ (* x (square a)) (* y b) (* a b))))
となる。
1.3.3 一般的方法としての手続き
- 区間二分法
- 不動点
- 平均緩和法
1.3.4 値として返される手続き
- Newton 法
- 作者: ハロルドエイブルソン,ジュリーサスマン,ジェラルド・ジェイサスマン,Harold Abelson,Julie Sussman,Gerald Jay Sussman,和田英一
- 出版社/メーカー: 翔泳社
- 発売日: 2014/05/17
- メディア: 大型本
- この商品を含むブログ (2件) を見る