KL1の述語は、KLIC中ではinclude/klic/struct.h内で定義されている、 predicate 型として表現されており、これを「述語記述子」と呼ぶ。 KL1言語レベルで用いられる述語型データ型データは、これをさらにgeneric objectで隠蔽したものである。
基本的には、「どのモジュールの、どの 述語か」ということが記述されている構造である。
struct predicate {
module (*func)(); module関数
unsigned short int pred; 述語ID
unsigned short int arity; 引数個数
};
なお、述語IDとは、述語に対してモジュール内でユニークに付けられる番号である。 よって、引数個数がなくともfunc, predなるペアで述語の特定は可能であるが、 内部処理(たとえばGC)によってはゴールレコードのサイズを知るため 引数個数が必要になることがあり、ここに記録されている。
この構造体は静的、つまり、KLICのコンパイラにより生成される。