Prolog:获取原子列表

时间:2013-11-15 10:45:58

标签: prolog

我有一套这样的事实:

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,但这会复制船,它不会按标准顺序。有人能指出我在哪里错了吗?感谢。

1 个答案:

答案 0 :(得分:2)

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

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