Haskell中如何在自定义map函数tfunc中使用lambda表达式?
替换Haskell函数中的自定义函数为Lambda表达式
嗨,作为Haskell新手遇到这种小困惑太正常啦,我来帮你把tfunc里的tfunc1换成lambda表达式,其实操作非常直接!
先看你原来的代码:
tfunc :: [Int] -> [Int] tfunc xs = map tfunc1 xs where tfunc1 x = x*3 + x
这里的tfunc1是一个命名辅助函数,我们只需要把它的逻辑直接写成匿名的lambda表达式,放到map的第一个参数位置就可以了:
替换后的基础版本
tfunc :: [Int] -> [Int] tfunc xs = map (\x -> x*3 + x) xs
进一步简化(可选)
因为Haskell支持柯里化特性,我们可以省略掉重复的参数xs,让代码更简洁优雅:
tfunc :: [Int] -> [Int] tfunc = map (\x -> x*3 + x)
另外,你还可以简化lambda里的计算逻辑——x*3 + x其实等价于x*4,所以也可以写成更精炼的版本:
tfunc :: [Int] -> [Int] tfunc = map (\x -> x * 4)
运行修改后的函数,输入tfunc [1,2,3,4,5],你会得到和之前完全一致的输出[4,8,12,16,20]。
内容的提问来源于stack exchange,提问作者Rahat Batool
相关产品推荐
相关产品推荐

