如何从 swi-prolog 查询中只获得一个输出?

How do you get only one output from a swi-prolog query?

如何从 SWI-Prolog 查询中只获得一个输出?我试过使用 cut (!) 但它似乎不起作用。

例如: 我已经用陈述填满了我的知识库,我想找到任何一个既是女性又是某人母亲的名字。

我已经试过了:

mother(X,Y), female(X).

...但这给了我所有的 X-__Y-__

我也试过:

mother(X,Y), female(X), !.

...但这仍然给了我 X-__Y__

我只想找到 X。有没有人有任何提示可以让我以某种方式只得到一个?

?- setof(t, Y^ ( mother(X, Y), female(Y) ), _).

这也将删除重复项(冗余 answers/solutions)。或者使用 library(lambda):

?- X+\ ( mother(X, Y), female(Y) ).

不会删除多余的答案。