Prolog 序言:从X=X的事实返回Y的列表
我对Prolog还不太熟悉,不能对某个问题绞尽脑汁。 假设我有两个事实(X,Y):Prolog 序言:从X=X的事实返回Y的列表,prolog,Prolog,我对Prolog还不太熟悉,不能对某个问题绞尽脑汁。 假设我有两个事实(X,Y): 事实(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,但我无法使其工作 提前谢谢你 您应该使用来获取查询的所有解决
事实(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,但我无法使其工作 提前谢谢你 您应该使用来获取查询的所有解决方案,并收集一个包含所需模板的列表 在您的示例中,它应该是:
findall(Y, fact(x, Y), LIST).
事实上,如果没有解决方案,使用setof/3或bagof/3会正确地失败,而findall会执行“程序性操作”,并成功地处理空列表。@DavidTonhofer:事实上,我相信学生可以更容易地理解findall/3,然后如果需要,继续使用setof/3或bagof/3。我还认为,如果没有找到解决方案,他想要的是一张空名单,而不是失败。你们真是太棒了,谢谢!真不敢相信我自己没找到这个。