SICP メモ[1.3] 高階手続きによる抽象
- 高階手続き
- 手続きを扱う手続き. 手続きを引数として取り, 手続きを値として返す手続きを構成など.
引数としての手続き
手続きを引数としてとる関数.
関数を引数として指定する.
めちゃくちゃつまんない例だけど, こういうものかな.
(define (arg-5 func arg) (func arg 5)) gosh> (arg-5 + 5) 10 gosh> (arg-5 - 7) 2
第1引数の関数へ, 第2引数と, 5 が与えられ, その結果が返る.
lambda を使う手続きの構築
わざわざ + 5 とかするのに, (内部手続きをするのに)新たに関数を作るのではなく,
内部で lambda を使ったり, let を使って局所変数にしよう, ということなのかな.
値として返される手続き
載ってた例をそのまま.
(define (square x) (* x x)) (define (average x y) (/ (+ x y) 2)) (define (average-damp f) (lambda (x) (average x (f x))))
こう使うみたい.
gosh> ((average-damp square) 10) 55
lambda の手続きを返すってことかな?
上手く表現できないけど, こんなことできんのか・・・.
とりあえず, 簡単にできそうな問題だけその場でやって,
飛ばしたのは, ある程度読んだら戻ってきてやるようにするかな.
こういうやり方したらやらないで終わるかもしれないけど, まあ, ものは試しだ.
今日は, まだ, すんなり読めたなあ.
明日は, 問題やってみるか. 1章の分溜ってるし.
明日1日じゃ終わんないだろうな, たぶん.
更新時刻
2007年, 3月15日, 00:31