我有一套这样的事实:
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,但这会复制船,它不会按标准顺序。有人能指出我在哪里错了吗?感谢。
答案 0 :(得分:2)
您必须明确量化:为变量添加存在性约束
placeList(Places) :- setof(Place, K^N^person(K, N, Place), Places).