数を、データ構造を「関数」で表現する

7月4日木曜日、雨

インディペンス・デイ、雨。

* * *

『計算機プログラムの構造と解釈 第二版』 P.52 より演習問題。

「ラムダ」、「無名関数」、「ブロック」。言い方はたくさんある。
最近のプログラム言語は LISP/Scheme で古くから使われてきた仕組みを当たり前に使えるようになってきた。
とくに関数が引数(パラメーター)として受け取った変数をそのまま「閉じ込んで」新しい関数を生成して返す仕組み(高階関数と呼ばれる)が使えると、その表現力は想像以上に大きくなる。

先に引いた「問題 2.4」はその一例。 cons は受け取った二つの引数からペア(対や組とも)を生成する手続き。
ペアの最初の要素((cons x y) で組み立てたときの x)を返す手続きを car(カー)、二つ目を返す手続きを cdr(クダー)と呼ぶ。

こういうインターフェースがあったときに、その裏では「データ構造」が生成される。(ごく単純にはオブジェクト x と y を格納するために十分なメモリー領域)
そういう考え方・表現で足りるのだけれど、データ構造を使わずに「関数」で引数の値を閉じ込めて、「関数」を経由して取り出す──そんな迂遠で神秘的な方法も使える。そういう世界もある。

* * *

そしてもう一つ。
こちらは「数」を「関数」で表す、というもの。

「加算」が定義できれば、さらにそれを使って「乗算」も定義できる。

(数がなくても)関数だけで、計算が可能になる。そんな世界がある。

この記事が気に入ったらサポートをしてみませんか?