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 に答える