sitelogo
bagof/3

ゴールの自由変数の全具体化によって、ゴールの全解のリストを生成する。

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


戻る 続く..
冒頭へ managed with ubiCMS