「宣言型プログラミング」の版間の差分

削除された内容 追加された内容
m Botによる: {{Normdaten}}を追加
G000001 (会話 | 投稿記録)
m lispと数学と宣言型プログラミング言語についての記述を整理しました
1行目:
[[ファイル:DFAexample.svg|境界|右|フレームなし|265x265ピクセル]]
{{プログラミング・パラダイム}}
 
26 ⟶ 25行目:
[[オートマトン|オートマタ理論]]的には、計算は遷移関数(''transition function'')、問題は入力値、解答は出力値、状態は遷移関数の[[非決定性チューリングマシン|非決定性]]に読み替えられる。プログラム的には、計算はサブルーチン、問題は引数、解答は返り値、状態はサブルーチン内外の静的メモリデータに読み替えられる。状態による計算の複雑性の拡充は、[[ノイマン型]]のコンピュータ機構に適したものだったので[[機械語]]と[[低水準言語]]([[アセンブリ言語|アセンブラ]])はその必要性から命令型で構築された。また最初期の[[高水準言語]]([[FORTRAN]]、[[COBOL]]、[[ALGOL]])も[[ノイマン型]]の性質に適した命令型になった。1950年代半ばからの高水準言語の普及につれて、命令型が利点的に拡充した計算の複雑性が今度は問題として挙げられるようになり、1960年代になると数学への原点回帰とも言える宣言型がその解決策として注目され始めた。また[[並行計算]]と宣言型の適性も認識され始めた。1970年代になると宣言型は非ノイマン型コンピュータ構築のためのパラダイムとしても重視されるようになった。
 
[[FORTRAN]]、[[ALGOL]]、[[COBOL]]といった[[命令型プログラミング|命令型]](''imperative'')[[高水準言語]]が公開されていく中で、1958年に初回発表された「[[LISP]]」が宣言型(''declarative'')高水準言語の元祖と見なされている。LISPは[[自動推論]]、[[自然言語処理]]、[[自動定理証明]]、[[人工知能]]研究といった目的で使われたが、当時の数学者の視点では命令的=手続き的(''procedural'')な言語と解釈されていた。式[[再帰]]の多用による[[複雑系]]のアルゴリズムがもはや平叙的(''declarative'')ではないと見なされたからである。1960年代から[[メインフレーム]]上の[[並行計算]][[データフロープログラミング|データフロープログラム]]が普及しそのための[[低水準言語]]はより平叙的な性質を示していた。また[[述語論理]]を基礎にした[[論理プログラミング]]の研究も始まりその中で実装された数々の言語もより平叙的な性質を持っていたが、1969年稼働の「[[Planner]]」は手続き的性質を備えていた。1964年公開の動的型付け関数型言語「[[APL]]」は平叙的であったが、LISPを原点にした60年代の[[関数型プログラミング]]は概ね手続き的性質に寛容だった。1970年代になると平叙的な静的型付け関数型言語「[[ML (プログラミング言語)|ML]]」と純粋関数型の先駆である「SASL」が公開され、1977年発表の関数水準言語「[[FP (プログラミング言語)|FP]]」は明確な平叙的=宣言型を旨としていた。これを発表した[[ジョン・バッカス]]([[FORTRAN]]開発者)は、関数型スタイルを従来の[[ノイマン型コンピュータ]]からの脱却と飛躍に結び付けた。命令型に対する宣言型というプログラミング理論構図が広まったのはこの頃からである
 
== 特徴 ==