繁体   English   中英

Haskell 中的函数 - 理解

[英]Functions in Haskell - Understanding

我有以下代码给出[2,4,6]

j :: [Int]
j = ((\f x -> map x) (\y -> y + 3) (\z -> 2*z)) [1,2,3]

为什么? 似乎只使用了“z-function”,“y-function”会发生什么? map在这种特殊情况下如何工作?

让我们计算一下:

((\f x -> map x) (\y -> y + 3) (\z -> 2*z)) [1,2,3]
                 ^^^ f ^^^^^^^ ^^^ x ^^^^^
=
(map x) [1,2,3]
   where f = \y -> y +3
         x = \z -> 2*z
=
[x 1,x 2,x 3]
   where f = \y -> y +3
         x = \z -> 2*z
=
[2*1,2*2,2*3]
   where f = \y -> y +3
         x = \z -> 2*z
=
[2,4,6]
   where f = \y -> y +3
         x = \z -> 2*z

如我们所见, f被用作参数,但此后从未使用过。 因此\y -> y+3从未影响最终结果。

function map x是 function 将x的每个元素应用到列表中请注意,上面的(map x) [1,2,3]map x [1,2,3]相同。 实际上,每个 function 应用程序g x1 x2 x3 x4可以通过左关联应用程序等效地写为(((g x1) x2) x3) x4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM