「関数型プログラミング」の版間の差分
削除された内容 追加された内容
m Update syntaxhighlight tags - remove use of deprecated <source> tags |
編集の要約なし |
||
(同じ利用者による、間の4版が非表示) | |||
5行目:
== 特徴 - 構文面 ==
=== 式と関数 ===
13行目:
*式を評価した値の後続式への反映は変数への代入ではなく、[[束縛変数]]で定数化するのが本来の在り方である。
*{{仮リンク|暗黙プログラミング|en|tacit programming|label=}}が指向されており、直前の式の評価値はそのまま直後の式の適用値にする事もできる。これは[[パイプライン処理|パイプライン]]またはポイントフリーと呼ばれる。
*関数も値と同一視される。関数は引数(''
*関数は、式の引数への適用(''
*関数は、式を第1引数に適用したもの→第2引数に適用したもの→第x引数に適用したもの→
*型の連鎖は、さながらパズルのような関数の断片化と連結を可能にする。前者は部分適用と呼ばれ、例えば式を第1引数に適用しただけのものを後続の式で使い回せる。後者は関数合成と呼ばれ、
*関数は名前付きと名前無しの二通りある。後者はラムダ抽象を模した構文で式中に直接定義される。これは[[クロージャ]]または[[無名関数]]と呼ばれる。
*関数は値と同義なので、関数の引数値を関数にする事も可能であり、また関数の
*演算子は、デフォルトの式内容を持ち引数が1~2個に限定された関数と同義である。演算子の式内容は任意に
===
*値(''value'')は型(''type'')によって分類さ
*値は代数的データ(''algebraic data'')として表現される。代数的データは、''atom(プリミティブ)nil(無)cons(値+リンク)''の要素からなる。代数的データは''cons''の再帰で構成されており、ゼロ個から複数以上の値を内包する事になる。''cons''の値は''atom''または入れ子の代数的データを指し、''cons''のリンクは次の''cons''または''nil''を指す。''atom''は数値、論理値、文字、文字列を指す。この再帰ツリー構造は[[S式]]と呼ばれる。
*代数的データは単体値の表現でもあり、あらゆる値集合の原始的表現でもある。代数的データによって単値と値集合を同等に扱うスタイルが関数型プログラミングの代表的利点であるリスト処理([[イテレーション]])に繋がっている。
*代数的データは''cons''の再帰構造であり、先頭''cons''の値+リンクを常時分離表現できる。そのリンクは後続全''consを''表現する。そのリンクが指す''cons''を再帰関数の引数にして値+リンクを再度分離しそのまた再帰を繰り返していくと、結果的に代数的データの全内包値に作用を及ぼせる事になる。
*全ての値が同じ型の代数的データは''list''と呼ばれ、
===
*[[再帰]]が重視されている。関数の再帰呼び出しと[[相互再帰]]が多用される。データ定義でも、データ名に対する定義式の中で自身データ名が記述される再帰定義が多用される。
42 ⟶ 36行目:
== 特徴 - 設計面 ==
[[数理論理学]]
=== パラダイム ===
48 ⟶ 42行目:
=== 参照透過性 ===
関数型プログラミングの世界は[[参照透過性]]の原則下にある。参照透過性の意味自体は非常にシンプルであり、関数は同じ引数値に対して必ず同じ評価値を恒久的に導出し、その評価過程においてプログラムの認知内における一切の情報資源に作用を及ぼさない、というものである。プログラムが認知する範囲内のいずれかの情報資源が変化するのと同時にいずれかの関数の評価過程も変化してしまう現象が[[副作用 (プログラム)|副作用]]と呼ばれる。
=== 型システム ===
=== 再帰と評価戦略 ===
|