next up previous contents
Next: 並列実行通信, 同期の機構 Up: 1.2.1 プログラムの形式と基本実行機構 Previous: ボディ・ユニフィケーション

節の形式と基本実行機構

プログラムを定義する節は, 一般には以下のような形をしている. 述語名(引数, ...) :- ガード | ボディ.

それぞれの部分の役割は以下の通りである.

述語名:
節で定義 (の一部) を与える述語 (手続き) の名前.
引数:
述語の引数と節の中で使う変数名の対応をつけるための仮引数 の並び. KL1 では変数名の有効範囲はひとつの節の中だけで, 同じ名前でも 別の節にあればまったく別のものとみなされる. 同じ述語の再帰的な呼び出 しについても, そのたびごとに同じ名前の変数が別の変数を意味する. これ は C の auto 変数と同様である.
ガード:
節の適用条件を指定する部分. カンマで区切ってゴールをい くつでも書け, すべてを満足した場合にだけ適用条件を満たしたものとする. ガードにはユニフィケーションの他に, 大小比較など, 言語で定義するある決 まった種類の述語の呼び出しだけが書ける.
ボディ:
節を選んだときに実行すべき部分. やはりカンマで区切ってゴールをいくつ でも書け, その節が選ばれたらすべてを実行する. ボディにはユニフィケー ションの他に, 他の述語, あるいは自分自身を呼び出すゴールが書ける.

KL1 で呼び出せる述語には, あらかじめ言語で定義する 組込述語 (built-in predicates) と, プログラム中に定義する ユーザ定義述語 (user-defined predicates) の二種類がある.

組込述語の多くは種々のデータについての基本操作や基本的な値の検査のため のもので, それらがどのように動作するかは KL1 言語の仕様の一部として定 められている. 特殊な組込述語として, 引数のない述語 `` true'' が ある. これはガードに現れれば常に真 (つまり無条件), ボディに現れれば何 もしないこと (no operation) を意味する.

ユーザ定義述語のゴールの実行では, その述語を定義する節がいくつかあると すると, まず各節の適用条件であるガードの真偽を試す. 次にガードが真で あるとわかった節をひとつだけ選び,gif そのボディのゴール (ユニフィケーションを含む) をすべ て今後実行すべきゴールとする. これを繰り返すのが KL1 プログラムの実行 過程である.



next up previous contents
Next: 並列実行通信, 同期の機構 Up: 1.2.1 プログラムの形式と基本実行機構 Previous: ボディ・ユニフィケーション



KLIC