値レベルプログラミングは、ジョン・バッカスが数学的対象としてのプログラムに関する研究で特定した2つの対照的なプログラミングパラダイムの1つを指し、もう1つは関数レベルプログラミングである。[ 1 ]バッカスは当初オブジェクトレベルプログラミングという用語を使用していたが、この用語は現在オブジェクト指向プログラミングと混同されやすい。
値レベルのプログラムとは、様々な値(数値、記号、文字列など)を組み合わせて、最終的な結果値を得る方法を記述するプログラムです。新しい値は、加算、連結、行列の逆行列計算など、様々な値間関数を適用することで、既存の値から構築されます。
従来のフォン・ノイマン型プログラムは値レベルであり、代入文の右側の式は、格納される値を構築することのみに関係します。
値レベルのプログラミング手法は、値生成演算の下にある値の空間、およびそれらの演算の代数的性質の研究を促します。これはデータ型の研究と呼ばれ、値そのものとその構造に焦点を当てることから、特定の公理や代数法則によって与えられる値生成演算とその構造を主な関心事とする、すなわちデータ型の代数的研究へと発展してきました。
ラムダ計算に基づく言語(Lisp、ISWIM、Schemeなど)は、実際には値レベルの言語であるが、設計上、そのように制限されているわけではない。
典型的なラムダ式プログラムが主に値レベルである理由を理解するために、値から値への関数の一般的な定義を考えてみましょう。
f = λ x . E
ここで、x は値変数でなければなりません ( fの引数は定義上値であるため)。また、 Eも値を表さなければなりません ( fの結果は定義上値であるため)。通常、Eは値変数と定数に値生成関数を適用する式です。ただし、関数と値の両方の引数を持つ値生成関数もいくつか存在し、限られた用途で使用されます。
値という用語を値変数自体を含むものとして定義するならば、プログラミングにおける値レベルの視点とは、既存のプログラム(値を生成する操作/関数)を他の値に適用することによって値を構築するという考え方である。ラムダ式プログラミングは、値変数をラムダ式で抽象化することにより、結果値から新しいプログラムを構築する。