3

我有一组这样的事实:

person(tj, 'Tom James', house).
person(jj, 'Jim Jones', hut).
person(aw, 'Alex Wolf', boat).
person(jw, 'John Wolf', boat).

我想获得他们可以居住的地方的清单:

[boat, house, hut].

我试过setof:

placeList(Places) :- setof(Place, person(_, _, Place), Places).

但我一次只得到每个地方而不是一个列表。我也试过 findall,但这会重复船,而且不是标准顺序。有人可以指出我在这里出错的地方吗?谢谢。

4

1 回答 1

2

你必须明确量化:为你的变量添加存在约束

placeList(Places) :- setof(Place, K^N^person(K, N, Place), Places).
于 2013-11-15T11:05:39.580 回答