List PROLOG列表中整数的和

List PROLOG列表中整数的和,list,prolog,sum,List,Prolog,Sum,我有一个函数列表 List = [segmentTime(red,a,c,2),segmentTime(green,c,e,3),segmentTime(green,e,h,4),segmentTime(blue,h,i,5)] 如何找到列表中所有元素的函数整数部分之和 i、 e 谓词的代码片段将非常有用。 提前感谢:你会惊讶于答案是多么简单 sumList([],0). sumList([segmentTime(_,_,_,X)|T],Z):- sumList(T,Z1),Z is Z1+X

我有一个函数列表

List = [segmentTime(red,a,c,2),segmentTime(green,c,e,3),segmentTime(green,e,h,4),segmentTime(blue,h,i,5)]
如何找到列表中所有元素的函数整数部分之和

i、 e

谓词的代码片段将非常有用。
提前感谢:

你会惊讶于答案是多么简单

sumList([],0).
sumList([segmentTime(_,_,_,X)|T],Z):- sumList(T,Z1),Z is Z1+X.
输出

希望这对你有所帮助。

另一种方法是使用librarylambda

输出:

?- getList(L), sumOfList(L, S).
L = [segmentTime(red, a, c, 2), segmentTime(green, c, e, 3), segmentTime(green, e, h, 4), segmentTime(blue, h, i, 5)],
S = 14.

您没有函数列表。您有一个复合术语列表。Prolog有谓词、事实和术语,但没有函数。你能告诉我们你已经尝试过的代码吗?如果没有,请尝试然后发布代码。这里有一个线索:sum[segmentTime_uuu,uu,uu,I | Xs],R:-。
?-sumList([segmentTime(red,a,c,2),segmentTime(green,c,e,3),segmentTime(green,e,h,4),segmentTime(blue,h,i,5)],M).
M=14
:- use_module(library(lambda)).

getList(L):-
 L = [segmentTime(red,a,c,2),segmentTime(green,c,e,3),segmentTime(green,e,h,4),segmentTime(blue,h,i,5)].

sumOfList(L, S) :-
   foldl(\X^Y^Z^(X = segmentTime(_,_,_,V), Z is Y + V), L, 0, S).
?- getList(L), sumOfList(L, S).
L = [segmentTime(red, a, c, 2), segmentTime(green, c, e, 3), segmentTime(green, e, h, 4), segmentTime(blue, h, i, 5)],
S = 14.