FP(プログラミング言語)

FP
パラダイム機能レベル
デザイン:ジョン・バッカス
初登場1977 (1977年
方言
FP84
影響を受けた
APL [ 1 ]
影響を受けた
FLハスケルジョイ

FPfunction programming[ 2 ]は、ジョン・バッカスによって関数レベルプログラミング[ 2 ]パラダイムをサポートするために作成されたプログラミング言語です。FPは、一般的に有用な言語プリミティブのセットからプログラムを構築し、名前付き変数を避けることができます(このスタイルは暗黙的プログラミングまたは「ポイントフリー」とも呼ばれます)。FPは、1960年代初頭にケネス・E・アイバーソンによって開発されたAPLから大きな影響を受けています。 [ 3 ]

FP言語は、1977年のバッカスによるチューリング賞論文「プログラミングはフォン・ノイマン型から解放されるか?:関数型スタイルとそのプログラム代数」で導入されました。この論文は関数型プログラミング研究への関心を呼び起こし、[ 4 ]最終的には、バッカスが期待した関数レベルのパラダイムではなく、主にラムダ計算パラダイムに基づく現代の関数型言語へとつながりました。チューリング賞論文の中で、バッカスはFPスタイルがどのように異なるかを説明しています。

FPシステムは、関数型と呼ばれる固定された結合形式の集合に基づいています。これらと簡単な定義は、既存の関数から新しい関数を構築する唯一の手段です。関数型は変数や置換規則を必要とせず、関連するプログラム代数における演算となります。FPシステムのすべての関数は単一の型、つまりオブジェクトをオブジェクトにマッピングし、常に単一の引数を取ります。[ 2 ]

FPは学術界以外ではほとんど使われなかった。[ 5 ] 1980年代に、BackusはIBM Researchの内部プロジェクトとして後継言語であるFLを作成した。

概要

FP プログラムが相互にマッピングする値は、シーケンス形成に関して閉じたセット構成します。

x 1 ,..., x nならば、x 1 ,..., x n〉 も値である。

これらの値は、ブール値、整数、実数、文字などの任意のアトムのセットから構築できます。

ブール値  : { T , F } 整数  : {0,1,2,...,∞} 文字 : {'a','b','c',...} シンボル  : { x , y ,...} 

未定義値、つまり底辺を表します。シーケンスは底辺を保持します

x 1 ,...,  ,..., x n〉 = 

FP プログラムは、それぞれ単一のx を別の値にマッピングする関数fです。

f : xは関数fをx に適用した結果のを表す。

関数はプリミティブ(つまり、FP 環境で提供される)であるか、プログラム形成操作によってプリミティブから構築されます(関数とも呼ばれます)。

プリミティブ関数の例としては、定数関数 x̄があり、これは値xを定数値関数に変換します。関数は厳密です。

f :  = 

プリミティブ関数のもう 1 つの例は、 12、... で表されるセレクタ関数ファミリです。

i :〈 x 1 ,..., x n〉 =  x i (1 ≤ i ≤ n の = ⊥ それ以外の場合 

関数

原始関数とは対照的に、関数は他の関数に対して作用します。例えば、加算の場合は0、乗算の場合は1のように、関数の中には単位値を持つものがあります。関数単位は、単位値を持つ関数 f に適用すると、そのようを生成します

単位 + = 0 単位 × = 1 単位 foo = ⊥ 

これらは FP のコア機能です。

合成fg ただし fg : x = f :( g : x ) 
構文[ f 1 ,..., f n ] ただし [ f 1 ,..., f n ]: x = 〈f 1 : x ,..., f n : x
条件( hf ; g ) ただし ( hf ; g ): x = f : xの場合h : x = T = g : x の場合 h : x = F = の 場合 それ以外の場合 
すべてに適用α f ただし α f :〈x 1 ,..., x n〉 = 〈f : x 1 ,..., f : x n
insert-right / f ただし / f :〈x〉 = x かつ / f :〈x 1 , x 2 ,..., x n〉 = f :〈x 1 ,/ f :〈x 2 ,..., x n〉〉 および / f :〈 〉 = 単位 f
左挿入 \ f ただし \ f :〈x〉 = xかつ \ f :〈x 1 , x 2 ,..., x n〉 = f :〈\ f :〈x 1 ,..., x n-1〉, x n〉 そして \ f :〈 〉 = 単位 f

方程式関数

関数は、関数によってプリミティブから構築されるだけでなく、方程式によって再帰的に定義することもできます。最も単純なものは次のとおりです。

fE f

ここで、E fは、関数を使用して、プリミティブ、他の定義済み関数、および関数シンボルfのみから構築されたです。

FP84

FP84 はFP の拡張であり、無限シーケンス、プログラマ定義の結合形式(Backus がFP の後継であるFLに追加したものに類似)、遅延評価が含まれます。Backus 独自の FP のバリエーションの 1 つである FFP とは異なり、FP84 ではオブジェクトと関数が明確に区別されています。つまり、後者は前者のシーケンスでは表現されません。FP84 の拡張は、シーケンス構築が-⊥以外のオブジェクトにのみ適用されるという FP の制限を削除することによって可能になります。FP84 では、式の全宇宙 (意味が ⊥ であるものも含む) がシーケンス構築の 下で閉じられています。

FP84 のセマンティクスは、プログラムの基本的な代数、つまりプログラムを操作したり推論したりするために使用できる 関数レベルの等式の集合に具体化されています。

参考文献

  1. ^関数型プログラミング言語の構想、進化、応用 2016年3月11日アーカイブポール・ハダック、1989年
  2. ^ a b c Backus, John (1978年8月1日). 「プログラミングはフォン・ノイマン型から解放されるか?:関数型プログラミングスタイルとそのプログラム代数」 Communications of the ACM . 21 (8): 613– 641. doi : 10.1145/359576.359579 .
  3. ^ 「Association for Computing Machinery AM Turing Award」(PDF) .
  4. ^ Yang, Jean (2017). 「Simon Peyton-Jones氏へのインタビュー」 . 『People of Programming Languages』 .
  5. ^ヘイグ、ジェームズ(2007年12月28日)「関数型プログラミング考古学」21世紀のプログラミング
  • 利便性のためにシンプルさを犠牲にする: どこで線引きするのか?、John H. Williams および Edward L. Wimmers、IBM Almaden Research Center、Proceedings of the Fifteenth Annual ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages、カリフォルニア州サンディエゴ、1988 年 1 月。