首页 > 解决方案 > Prolog-如何仅对另一个列表中的部分列表求和?

问题描述

定义一个递归规则,形式为 sum(Lst, Total),可以计算statement列表的总和,其中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. 

标签: prolog

解决方案


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

sum([],0).

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


推荐阅读