[ 目次, 前節, 次節, 索引 ]

1.3  高階手続きによる抽象



手続きは, 特定しない数に関する合成演算を記述し, 実効的に抽象であることを見てきた. 例えば

(define (cube x) (* x x x))
と定義すると, 特定の数の三乗ではなく, 任意の数の三乗を得る方法を話題としている. もちろんこういう手続きを定義しなくても
(* 3 3 3)
(* x x x)
(* y y y)        
のようにいつも式を書き, cubeには触れずに済すことは出来るが, われわれは高いレベルの演算を使わず, 言語にたまたま組み込まれている特定の演算(ここでは乗算)のレベルでいつも仕事を強要されるという不便なところへ押しやられる. プログラムで三乗することは出来るが, 言語には三乗の概念を表す能力がない. 強力なプログラム言語への要請の一つは, よくあるパターンに名前をつけて抽象化し, その抽象を直接使って仕事をする能力である. 手続きはこの能力を提供する. これが, 最も基本的なものを除き, すべてのプログラム言語に手続きを定義する機構が存在する理由である.

   しかしパラメタは数値でなければならないと制限されると, 数値計算でさえも抽象の能力は激しく狭められるであろう. 時には同じプログラムパターンが多くの異った手続きとともに使われる. このようなパターンを概念として表記するには, 手続きを引数としてとり, 手続きを値として返す手続きが構成したくなる. 手続きを扱う手続きを 高階手続き(higher-order procedures)という. 本節では高階手続きが強力な抽象機構として役立ち, われわれの言語の表現力を拡大することを見よう.


[ 目次, 前節, 次節, 索引 ]