首页 > 解决方案 > 附加元素满足特定条件以在 swi-prolog 中列出

问题描述

我想将满足某个谓词的所有元素附加到一个空列表中。我做了这样的事情:

fact(a).
fact(b).
fact(c).
append(list, E, R) :- fact(E),append([], [E], R).

但它没有用。

任何人都可以帮忙吗?

标签: prolog

解决方案


Append/3 是一个预定义的谓词,你不能自己重新定义它。我想你想要一个包含所有事实的列表 R。所以,这是我的建议:

main(ListOfFacts) :-
    bagof(Afact, fact(Afact) , ListOfFacts).

?- main(R).
R = [a,b,c].

Bagof/3 是一个预定义的谓词,其中参数 3 是参数 1 定义的所有值的列表,它在参数 2 中的谓词中成功。

有帮助吗?


推荐阅读