K-Prolog Compiler Version 6.0 
解の集合を求めるための組込み述語は3種類用意されています。
単純にゴールを実行して得られる解をリスト化するときは findall/3を 用います。
これに対して、解の重複を取り除き自由変数との組合せで分類した解をリスト化して返すためには bagof/3を用います。 このとき自由変数の指定に P^Q 形式を用います。 項Pに現れる変数は自由変数とみなされません。 解の集合を求めるときに、Qに現れる変数が同一の値をとるものを一つの集合に分類して結果を返しますが、P^Qと指定した場合には、P に現れる変数の値が異なっていても、解の同一の集合に含めます。
さらにソートも行なう場合は setof/3を用います。 bagofやsetofでの解の分類は後戻りによって解を一つづ返す事によって行います。
| findall(@Term,@Goal,?Bag) |
| Term | 項 |
| Goal | ゴール |
| Bag | 結果のリスト |
Goalを実行し得られるTermをコピーして実行結果の順に並べたリストとBagを単一化します。 Goalが一度も成功しなければ、Bagは[]になります。 実行結果のソートは行なわれません。さらに、自由変数による複数の解集合のパタン もないため、この述語は決定的述語となります。
エラー
| instantiation_error |
| type_error |
| bagof(@Term,@Goal,?Bag) |
| Term | 項 |
| Goal | ゴール |
| Bag | 結果のリスト |
Goalを実行し得られるTermをコピーして実行結果の順に並べたリストとBagを単一化します。 Goalが一度も成功しなければ、この述語は失敗します。 実行結果のソートは行なわれませんが、 自由変数による複数の解集合のパタンの分類が行われ、 この述語は非決定的述語となります。
エラー
| instantiation_error |
| type_error |
| setof(@Term,@Goal,?Bag) |
| Term | 項 |
| Goal | ゴール |
| Bag | 結果のリスト |
Goalを実行し得られるTermをコピーして実行結果の順に並べたリストを sortした結果とBagを単一化します。 Goalが一度も成功しなければ、この述語は失敗します。 自由変数による複数の解集合のパタンの分類が行われ、 この述語は非決定的述語となります。
エラー
| instantiation_error |
| type_error |