将原子添加到prolog列表
我对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|
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)
内置谓词。