| ゴールの自由変数の全具体化によって、ゴールの全解のリストを生成する。
bagof(+項, +(テンプレート ^ ゴール), ?項リスト)
bagof(+項, +ゴール, ?項リスト)
bagof/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).
?- bagof(Element, contains(What, Element), List).
Element = _1
What = house
List = [window,door,room,table,floor,tile];
Element = _1
What = room
List = [table,floor,tile];
Element = _1
What = floor
List = [tile]
?- bagof(Element, What ^ contains(What, Element), List).
Element = _1
What = _2
List = [window,door,room,table,floor,tile,table,floor,tile,tile]
?- bagof(Element, contains(house, truck), List)
no
標準
この述語は、ISO-Prolog標準に含まれる.
関連
findall/3,
setof/3
|