KLIC で前掲のインバータのプログラムを実行するには, メイン・プログラム としての体裁を整えなければならない. たとえば以下のようなものを用意する.
:- module main. main :- not(1, X), io:outstream([print(X),nl]). not(In, Out):- In = 0 | Out = 1. not(In, Out):- In = 1 | Out = 0.
最初の行で, これがメインプログラムのモジュールだということを宣言してい る. 次の main から始まる行がメインプログラムの本体である. そこには not という先ほど見たプログラムを呼び, その結果を書き出す, ということが 書いてある. 書き出すための io:outstream 云々というのは, ここでは無意 味なおまじないだと思っておいてよい.
ここでは not の引数に 1 と X を与えた. 整数 1 は普通の整数値 1 を表す. KL1 では大文字で始まる名前は変数を表す. ここでは他にはまだどこにも出 てこなかったまっさらの変数 X を第2引数に渡したわけである.
このプログラムのうち, not の呼び出しの部分の実行は以下のようになる.
この実行の結果, 引数に与えた X の値が 0 に決まったので, それが出力され,
プログラムはつつがなく終了することになる.
KL1 の変数は C のような手続き型言語でいう『変数』とは大きく異なる. 手 続き型言語では『変数』は値の格納場所であって, 計算の進行に伴って格納さ れている値は 0 になったり 1 になったりと変化する. KL1 の変数はもっと 数学でいう変数に近く, 値は決まっていないか決まっているかのどちらかで, いったん値を決めたら後で変わることはない.
最初に与える第一引数を 0 に変えれば, 当然出力されるのは 1 になる.