Haskell如何在元组列表第二个元素求和后追加固定整数?
解决方案
有两种简单的实现方式可以满足你的需求:
方法一:直接修改递归基准情况
把原函数的空列表返回值从0改为5,递归到最后时会自动把这个5加到总和里:
pizza :: [(String, Int)] -> Int pizza [] = 5 -- 基准情况改为返回5 pizza ((_, b):xs) = b + pizza xs
测试输入pizza [("Cheese",10),("Dough",5)]时,计算过程为 10 + (5 + 5) = 20,符合预期。
方法二:拆分逻辑(更清晰)
保留原有的求和逻辑作为辅助函数,再封装一层添加5的逻辑,职责划分更明确:
-- 原求和函数,负责计算元组第二个元素的总和 sumSecond :: [(String, Int)] -> Int sumSecond [] = 0 sumSecond ((_, b):xs) = b + sumSecond xs -- 新的pizza函数,在求和结果基础上加5 pizza :: [(String, Int)] -> Int pizza xs = sumSecond xs + 5
这种方式更易维护,后续如果需要调整求和逻辑或添加的数值,都可以单独修改对应部分。
另外,原代码里的((a),b)可以简化为(_,b),因为我们不需要用到元组的第一个String元素,用下划线_表示忽略该值更符合Haskell的编码习惯。
内容的提问来源于stack exchange,提问作者Serp
相关产品推荐
相关产品推荐

