将原子添加到prolog列表

将原子添加到prolog列表,prolog,Prolog,我对Prolog还相当陌生,我正试图了解列表的概念。我正在尝试的一个例子是: value(a, 1). value(b, 2). value(a, 3). value(a, 4). value(c, 3). 我试图创建一个谓词,当查询它时,find(a,List)结果是:List=[1,3,4]。 它只是简单地检查所有事实,并将匹配的事实添加到列表中 我试过这样的东西。但这似乎根本不对: find(X, List):- value(X, D), append([D], [], [List|

我对Prolog还相当陌生,我正试图了解列表的概念。我正在尝试的一个例子是:

value(a, 1).
value(b, 2).
value(a, 3).
value(a, 4).
value(c, 3).
我试图创建一个谓词,当查询它时,
find(a,List)
结果是:
List=[1,3,4]。

它只是简单地检查所有事实,并将匹配的事实添加到列表中

我试过这样的东西。但这似乎根本不对:

find(X, List):-
  value(X, D), append([D], [], [List|Rest]), find(X, [Head|List]).
很抱歉问了这么一个基本的问题。感谢您的指导

注意:我打算通过使程序添加列表中的所有值来扩展程序。

查看这里:

我相信你想做的已经存在了,试试这个:

?- findall(X,value(a,X),List).
我没有在这台机器上安装prolog,所以我不能完美地测试它,但这应该能让你得到你想要的

编辑:抱歉,我设法进入了swi,并意识到我有两个参数被颠倒了,请立即查看更新的代码。还对其进行了测试,结果正常:-)

编辑2:根据上面的注释,您可以收集与“a”匹配的值,并获得可以组合成以下值的总和:

?- findall(X, value(a,X), List), sumlist(List, Sum).

-Ken

要对结果列表求和,只需使用
sumlist(list,sum)
内置谓词。