並行論理プログラミング
Strand(STReam AND-Parallelism)は、Fosterらにより1989年に発表された商用ベースの言語である。ガード部に組み込み述語のみを記述できるフラットな言語で、プログラムはFlat GHCとよく似たものとなる。この言語はErlang開発初期にベース言語として使われた。マージプロセスのプログラム例を以下に示す。
Strandでは、中断のメカニズムとしてGHCと同じ入力ガード (Input Guard)を用いる。GHCと同様、多重環境の問題はない。出力となる変数の具体化はボディ部のみで行い、GHCと異なりユニフィケーションではなく代入":="を用いる。KL1と同様、物理的並列性などはプラグマ付加で指定することができる。 言語の特徴を以下にまとめる。
並行論理プログラミングでは、導出時のゴールをプロセス、共通論理変数を通信チャネルと見なし、論理変数を介して通信を行う複数のプロセスのネットワークとしてプログラムを記述する。 並行論理プログラミングのプログラムは、一般に以下のガード付きのホーン節(Horn clause)の集まりで表現される。"|"はコミット演算子と呼ばれる。G はガード部、B はボディ部と呼ばれる。Head、G、Bはそれぞれ原子論理式である。
宣言的には、"|"、","は共にANDを表し、通常のホーン節と同様の意味を持つ。 ゴールの書き換え規則として見た場合、HeadとG1, ..., Gnは書き換えのための条件、B1, ..., Bmは書き換え後のゴールを表す。書き換えを繰り返すことで、全てのゴールが何もしないゴール"true"まで書き換えられて実行が終了するとすると、この書き換えは簡約化 (reduction) と解釈できる。複数のゴールは並行に書き換えてよく、書き換え規則の適用に十分な情報がなければ書き換えは中断する。また、各ゴールについて書き換え条件のチェックも複数の節で並行に実行してよく、コミット時にただ1つの節が選択される(コミッティッド・チョイス)。