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