Prolog:Return 来自事实的 Y 列表,其中 X = x

Prolog: Return list of Y from facts where X = x

我是 Prolog 的新手,无法解决某个问题。 假设我有几个事实 fact(X,Y):
事实(a,m)。
事实(b,m)。
事实(c,n)。
事实(x,q)。
事实(x,y)。
事实(x,z)。

我想创建一个包含所有 Y 个事实和特定 X 的列表。 例如:
?- getList(x, LIST).
列表 = [q,y,z].

返回 q、y、z,因为它们在 X = x 的事实中找到。

有什么快速的方法吗?我尝试使用递归遍历所有事实(x,Y)并附加每个 Y 但我无法使其工作。

提前致谢!

您应该使用 findall/3 获取您的查询的所有解决方案,并使用您想要的模板收集一个列表。

在你的例子中它应该是:

findall(Y, fact(x, Y), LIST).