我正在研究一个程序,它会取一个三元组列表,并且根据其中一个是真的,我想找到三元组其他部分之一的总和。
{{1}}
因此程序应该将列表中的所有权重值相加,并且只有当该三元组是第一类时才显示它。到目前为止,我有一个帮助声明,我希望累积所有值,并最终显示在最后。
非常感谢任何帮助或建议。
关心,基兰。
答案 0 :(得分:2)
你的代码中的工作太多了。尝试考虑使用通用组合子来表达你的代码,而不是像这样编写原始递归。
totalWeightOfFirstClass = sum . (fmap (\(weight, _, _) -> weight)) . filter (\(_, _, firstc) -> firstc)
在应用滤镜后对所有重量求和。如您所见,代码非常干净,无法阅读。
答案 1 :(得分:1)
如果我正确理解你,你想要包裹被送到头等舱的权重总和,这应该可以解决问题:
totalWeightOfFirstClass :: [Parcel] -> Weight
totalWeightOfFirstClass [] = 0
totalWeightOfFirstClass ((weight, postcode, firstclass):xs)
| firstclass = weight + totalWeightOfFirstClass xs
| otherwise = totalWeightOfFirstClass xs