Haskell数据和类型声明

时间:2018-05-19 15:36:44

标签: haskell type-definition

自行车比赛可以表示为自行车骑手名单。每个骑手都会记录他们的能力等级(高或低),名字以及他们在每场比赛中完成的时间(以分钟为单位),具体如下:

data Ability =  High | Low
data RiderResults = Rider Ability String [Int]
type Championship = [RiderResults]

如何解决totalTime :: RiderResults - > Int返回该骑手在其所有比赛中所花费的总时间,包括任何罚分。高能力骑手因实际时间加倍而受到惩罚(例如,罚前总时间70分钟变为140分钟)。

我做过像

这样的事情
 totalTime :: RiderResults -> Int   
 totalTime (x:xs) = if x == Low then sum x*2 
                    else x : totalTime xs

但这是错误的。我有解决Haskell中的类型定义和数据声明的练习题,这就是其中之一。有人可以解释如何处理这些问题吗?

1 个答案:

答案 0 :(得分:5)

RiderResults值不是列表;它是能力,名称和时间列表的三倍。在总结存储在值中的时间之前,您需要首先解压缩该值。

totalTime (Rider ab _ times) = sum (map penalty times)
  where penalty = if ab == Low then id else (*2)