Next: 並列実行通信, 同期の機構
Up: 1.2.1 プログラムの形式と基本実行機構
Previous: ボディ・ユニフィケーション
プログラムを定義する節は, 一般には以下のような形をしている.
述語名(引数, ...) :- ガード | ボディ.
それぞれの部分の役割は以下の通りである.
- 述語名:
-
節で定義 (の一部) を与える述語 (手続き) の名前.
- 引数:
- 述語の引数と節の中で使う変数名の対応をつけるための仮引数
の並び. KL1 では変数名の有効範囲はひとつの節の中だけで, 同じ名前でも
別の節にあればまったく別のものとみなされる. 同じ述語の再帰的な呼び出
しについても, そのたびごとに同じ名前の変数が別の変数を意味する. これ
は C の auto 変数と同様である.
- ガード:
- 節の適用条件を指定する部分. カンマで区切ってゴールをい
くつでも書け, すべてを満足した場合にだけ適用条件を満たしたものとする.
ガードにはユニフィケーションの他に, 大小比較など, 言語で定義するある決
まった種類の述語の呼び出しだけが書ける.
- ボディ:
-
節を選んだときに実行すべき部分. やはりカンマで区切ってゴールをいくつ
でも書け, その節が選ばれたらすべてを実行する. ボディにはユニフィケー
ションの他に, 他の述語, あるいは自分自身を呼び出すゴールが書ける.
KL1 で呼び出せる述語には, あらかじめ言語で定義する 組込述語
(built-in predicates) と, プログラム中に定義する ユーザ定義述語
(user-defined predicates) の二種類がある.
組込述語の多くは種々のデータについての基本操作や基本的な値の検査のため
のもので, それらがどのように動作するかは KL1 言語の仕様の一部として定
められている. 特殊な組込述語として, 引数のない述語 `` true'' が
ある. これはガードに現れれば常に真 (つまり無条件), ボディに現れれば何
もしないこと (no operation) を意味する.
ユーザ定義述語のゴールの実行では, その述語を定義する節がいくつかあると
すると, まず各節の適用条件であるガードの真偽を試す. 次にガードが真で
あるとわかった節をひとつだけ選び,
そのボディのゴール (ユニフィケーションを含む) をすべ
て今後実行すべきゴールとする. これを繰り返すのが KL1 プログラムの実行
過程である.
Next: 並列実行通信, 同期の機構
Up: 1.2.1 プログラムの形式と基本実行機構
Previous: ボディ・ユニフィケーション
KLIC