首页 > 解决方案 > Prolog:从 X = x 的事实返回 Y 的列表

问题描述

我对 Prolog 很陌生,无法解决某个问题。假设我有几个 Facts fact(X,Y)
fact(a, m)。
事实(b,m)。
事实(c,n)。
事实(x,q)。
事实(x,y)。
事实(x,z)。

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

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

有没有快速的方法来做到这一点?我曾尝试使用递归遍历所有事实(x,Y)并附加每个 Y,但我无法使其工作。

先感谢您!

标签: prolog

解决方案


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

在您的示例中,它应该是:

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

推荐阅读