创建一个累积列表部分的程序 - Haskell

时间:2017-11-03 19:57:59

标签: list haskell recursion helper

我正在研究一个程序,它会取一个三元组列表,并且根据其中一个是真的,我想找到三元组其他部分之一的总和。

{{1}}

因此程序应该将列表中的所有权重值相加,并且只有当该三元组是第一类时才显示它。到目前为止,我有一个帮助声明,我希望累积所有值,并最终显示在最后。

非常感谢任何帮助或建议。

关心,基兰。

2 个答案:

答案 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