Prolog 序言:获取原子列表

Prolog 序言:获取原子列表,prolog,Prolog,我有一系列的事实如下: person(tj, 'Tom James', house). person(jj, 'Jim Jones', hut). person(aw, 'Alex Wolf', boat). person(jw, 'John Wolf', boat). 我想得到一份他们可以居住的地方的清单: [boat, house, hut]. 我试了一套: placeList(Places) :- setof(Place, person(_, _, Place), Places).

我有一系列的事实如下:

person(tj, 'Tom James', house).
person(jj, 'Jim Jones', hut).
person(aw, 'Alex Wolf', boat).
person(jw, 'John Wolf', boat).
我想得到一份他们可以居住的地方的清单:

[boat, house, hut].
我试了一套:

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

但我一次只能得到每个地方,而不是一张清单。我也试过findall,但那个会复制这艘船,而且它的顺序也不符合标准。有人能指出我哪里出了问题吗?谢谢。

您必须明确量化:向变量添加存在约束

placeList(Places) :- setof(Place, K^N^person(K, N, Place), Places).

您还可以对
findall
的结果使用
sort/2