Concurrent Prolog
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/03 01:23 UTC 版)
「並行論理プログラミング」の記事における「Concurrent Prolog」の解説
Relational Languageを参考にして、Shapiroは1983年に単純で表現力の高いConcurrent Prologを提案した。通信にはストリームだけでなく任意の項が使えるようになり、ガードの記述の制限もなくなった。不完全メッセージなどの技法も使うことができ、通信チャネルを第一級のオブジェクトとして扱えるようになった。また、Relational Languageは並行実行と逐次実行の両方の機能を含んでいたが、Concurrent Prologは全てを並行に実行することを前提にすることで非常に単純化された仕様になった。Concurrent PrologはShapiroにより様々なバリエーションが提案され、分析されている。2つのストリームをマージし1つのストリームにするマージプロセスのプログラム例を以下に示す。 merge([A|Xs],Ys,[A|Zs]) :- true | merge(Xs?,Ys,Zs).merge(Xs,[A|Ys],[A|Zs]) :- true | merge(Xs,Ys?,Zs).merge([],Ys,Ys) :- true | true.merge(Xs,[],Xs) :- true | true. Concurrent Prologでは、中断のメカニズムとして読み出し専用標記 (Read Only Annotation)を用いる。読み出し専用標記は"?"で表され、任意の変数に付与することができる。読み出し専用変数を変数以外の項に具体化しようとする試みは中断させられる。つまり、読み出し専用標記が付加された変数へのアクセスは入力モードだけが許される。これにより変数が具体化されるまで待つという同期と、変数毎のデータ入出力の方向性の指定とができる。また、ガードの実行(ヘッドとガード部の実行)で行われた変数への書き込みは、その後の失敗により変更される可能性があるため、どれか1つの節がコミットされるまで他のプロセスに公開されない。つまりConcurrent Prologのガードには制約の追加を行うTell部(Atomic Tell)が含まれる。Concurrent Prologでは、ガード実行時に節ごとで変数の値が異なる多重環境を管理する必要があり、全ての節の並行実行を行う際に管理が複雑になる。言語の特徴を以下にまとめる。 * 同期の表現方法 読み出し専用標記 (変数単位で指定)* 制約の入出力 Blocking AskとAtomic Tell* プロセス間通信 任意の項を使用可能* 実行形態 並行実行* その他の特徴 言語仕様が単純、多重環境の管理が必要、Atomic Tellにより表現力が高い
※この「Concurrent Prolog」の解説は、「並行論理プログラミング」の解説の一部です。
「Concurrent Prolog」を含む「並行論理プログラミング」の記事については、「並行論理プログラミング」の概要を参照ください。
固有名詞の分類
プログラミング言語 |
Information Processing Language チューリング完全 Concurrent Prolog JavaScript Object Notation 軽量プログラミング言語 |
並行計算 |
Ada トランスピュータ Concurrent Prolog 共有メモリ マイクロスレッド |
Weblioに収録されているすべての辞書からConcurrent Prologを検索する場合は、下記のリンクをクリックしてください。

- Concurrent Prologのページへのリンク