論理プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/19 16:42 UTC 版)
派生分野
並行論理プログラミング
Keith Clark、Hervé Gallaire、Steve Gregory、Vijay Saraswat、Udi Shapiro、Kazunori Ueda(上田和紀)らは、共有変数のユニフィケーション機能とメッセージのためのデータ構造ストリーム機能を備えた並行論理プログラミング言語を開発した。数理論理学に基づく並行プログラミングの基礎を築くための研究であるが、これが第五世代コンピュータの基盤ともなった。
並行論理プログラミングは制約論理プログラミングと結び付き、制約で並行実行を制御する並行制約プログラミングとして統合され、 Saraswatらにより理論化が行われた。KahnとSaraswatは並行制約プログラミングの枠内での制約の設定でアクターモデルが実現できることから、アクターモデルは並行制約プログラミングの特別なケースだと主張した[5]。
- Concurrent Prolog、PARLOG、GHC、KL1
- Oz、Alice、ToonTalk
制約論理プログラミング
述語記号の項に、制約も含めるようにしている。制約(constraint)とは値(元・要素・個体)を”関係性”で表現したものであり、決定変数の集合で定義される計算対象である。
- B-Prolog、Ciao、ECLiPSe、Fril
高階論理プログラミング
述語記号の項に、述語記号も含めるようにしている。例えば、p(A, B, C) :- q(A, foo), r(B, bar), C.
では、Cを別個の述語記号にできる。テンプレートメタ的な書式も扱っており、例えばp(A, B, C) :- (C)(A, B)
では、Cが述語名でAとBがその項になる。
- λProlog、HiLog
関数論理プログラミング
述語記号と関数記号の双方をリテラルにしている。
- Mercury、Curry
オブジェクト指向論理プログラミング
ファクトとルールをまとめたモジュールを扱っている。module.predicate(A, B, C)
のように表記できる。モジュールは、オブジェクト指向由来の継承と多態性を備えている。既存の上位モジュールを継承して新規の下位モジュールを定義できる。上位モジュールの変数に下位モジュールを代入してサブタイピングするのが多態性である。例えばvar.predicate(A, B, C)
では、上位変数var
に下位モジュールAを代入するとAのpredicate
と解釈され、同変数に下位モジュールBを代入するとBのpredicate
と解釈される。
- Visual Prolog
線形論理プログラミング
線形論理を扱っている。
帰納論理プログラミング
仮説論理プログラミング
- ^ Alain Colmerauer and Philippe Roussel, The birth of Prolog
- ^ Robert Kowalski. The Early Years of Logic Programming
- ^ Robert Kowalski. The Early Years of Logic Programming
- ^ R.A.Kowalski (July 1979). “Algorithm=Logic + Control”. Communications of the ACM 22 (7): 424–436. doi:10.1145/359131.359136.
- ^ Kenneth Kahn, and Viyaj Saraswat, Actors as a Special Case of Concurrent Constraint Programming
論理プログラミングと同じ種類の言葉
- 論理プログラミングのページへのリンク