Haskell实现二元元组列表逐对求积返回一维乘积数组方法
Haskell实现二元元组列表逐对求积
针对输入二元数值元组列表、逐对计算乘积返回一维结果列表的需求,直接用列表映射操作就能实现,写法非常简洁:
基础实现
最易读的常规写法是用高阶函数map遍历列表,对每个元组做乘积计算:
pairProduct :: Num a => [(a, a)] -> [a] pairProduct tupleList = map (\(x, y) -> x * y) tupleList
- 类型约束
Num a表示函数兼容所有数值类型(Int、Float、Double等都可正常处理) - 传入测试用例
[(3,4), (6,5)]调用pairProduct,会直接返回预期结果[12,30]
更精简的写法
利用uncurry函数可以把柯里化的乘法运算符(*)转成直接接收二元元组的函数,能写出更简洁的点自由风格实现:
pairProduct :: Num a => [(a, a)] -> [a] pairProduct = map (uncurry (*))
调用示例
main :: IO () main = print $ pairProduct [(3,4), (6,5)] -- 运行输出: [12,30]
如果只是在GHCi交互环境临时使用,甚至不需要单独定义函数,直接输入map (uncurry (*)) [(3,4), (6,5)]就能得到计算结果。
内容的提问来源于stack exchange,提问作者Deniz Gölbaş
相关产品推荐
相关产品推荐

