我有以下内容:
type Description = String
type WeeklyHours = Float
type HourlyPay = Float
type JobDB = [(Description, WeeklyHours, HourlyPay)]
weeklyJobPay :: JobDB -> [(Description,Float)]
weeklyJobPay jDB = undefined
对于JobDB中的每个元组,我需要函数weeklyJobPay将每周小时乘以HourlyPay。我怎么能这样做?
答案 0 :(得分:6)
根据模式匹配定义访问器:
sndthd :: (a,b,c) -> (b,c)
sndthd (_,b,c) = (b,c)
如果您有其他转换,例如小时*付费,类似的功能是:
flatten :: JobDB -> (Description, Float)
flatten (d,h,p) = (d, h*p)
请注意,您应使用Double
而不是Float
。
答案 1 :(得分:2)
使用模式匹配和地图:
weeklyJobPay :: JobDB -> [(Description,Float)]
weeklyJobPay jDB = map (\(desc, wh, hp) -> (desc, wh * hp)) jDB
虽然创建一个计算每个工作描述的每周工资的函数会更好,然后在它上面映射它们的列表:
weeklyDescPay (desc, wh, hp) = (desc, wh * hp)
weeklyJobPay = map weeklyDescPay