優先度指定付きのプログラムをまず見せよう.
% genconwp.kl1
:- module main.
main:- true |
generator(20000,Stream)@lower_priority, consumer(Stream).
generator(0,Stream) :- true | Stream = [].
generator(N,Stream) :- N =\= 0 |
Stream = [N | NextStream],
N1 := N - 1,
generator(N1,NextStream).
consumer([]):- true | true.
consumer([N|Stream]):- integer(N) | consumer(Stream).
先ほどの要求駆動型プログラムより簡単であり,
ページの
プログラムとほとんど変わらない.
次の通りメモリ不足に陥らず, 計算できる.

実行トレースを見てみよう.

実行順序が制御されていることが分かる.
ソースプログラム中の見慣れない記号を説明しよう. 今までの記述と 異なるのは次の箇所である.
generator(20000,Stream)@lower_priority
ゴールの後ろについた@lower_priorityは, ゴール優先度指定プラグマと
呼ばれる. この記述は `現在よりひとつ低い優先度でこのゴールリダクションを
試みよ' を意味する. この優先度に関しては,
次の規則に従って KL1 プログラムが実行されている.