ゴールの自由変数の全具体化によって、ゴールの全解の重複を除いた順リストを生成する。
setof/3は、
ゴールの自由変数に対してそれぞれ異なる具体化を行い、
項がゴールの解となる、
項のすべての具体化の順リストによって項リストを単一化する。
重複はリストから除かれる。
ゴールでのみ現われ、
項あるいは テンプレートには現れない変数は、
自由変数と呼ばれる。
項 項 テンプレート 項 ゴール ゴール 項リスト リスト
part_of(house, window). part_of(house, door). part_of(house, room). part_of(room, table). part_of(room, floor). part_of(floor, tile).contains(X, Y) :- part_of(X, Y). contains(X, Y) :- part_of(X, Z), contains(Z, Y).
?- setof(Element, contains(What, Element), List).
Element = _1 What = house List = [door,floor,room,table,tile,window] ;
Element = _1 What = room List = [floor,table,tile] ;
Element = _1 What = floor List = [tile]
?- setof(Element, What ^ contains(What, Element), List).
Element = _1 What = _2 List = [door,floor,room,table,tile,window]
?- setof(Element, contains(house, truck), List)
no
この述語は、ISO-Prolog標準に含まれる。
| 冒頭へ |
|