| ゴールの自由変数の全具体化によって、ゴールの全解の重複を除いた順リストを生成する。
setof(+項, +(テンプレート ^ ゴール), ?項リスト)
setof(+項, +ゴール, ?項リスト)
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標準に含まれる。
関連
bagof/3,
findall/3.
|