Prolog-如何只对另一个列表中的一部分列表求和?

时间:2019-04-20 18:38:19

标签: prolog

以以下形式定义递归规则 sum(Lst, Total),它可以计算一个声明列表的总和,其中Lst的格式为[[s1, p1], [s2, p2], … [sn, pn]]

所以我只想求和p而s不是数字。 我该怎么办?

sum([[az, ​7​], [ca, ​40​], [ne, ​3​], [ut, ​3​], [or, ​4​],Total).

它应该返回Total = 60。但我的代码未返回任何内容

我有

sum([[_,X]|T],Total) :- 
    sum(T,Rest),
    Total is X + Rest. 

2 个答案:

答案 0 :(得分:2)

sum(L,Total):-总计(L,0,Total)。

sum([],总计,总计)。

sum([[[_ | HT] T],Temp,Total):-Temp1是temp + HT,total(T,Temp1,Total)。

答案 1 :(得分:2)

您只缺少列表为空的基本情况!

sum([],0).

sum([[_,X]|T],Total) :- 
    sum(T,Rest),
    Total is X + Rest.