Haskell中的函数-理解

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

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

为什么?似乎只使用了“z 函数”,“y 函数”会发生什么?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从未影响最终结果。

函数map x是将函数应用于x列表的每个元素的函数。请注意,上面(map x) [1,2,3]map x [1,2,3]. 实际上,每个功能应用程序g x1 x2 x3 x4都可以等效地编写为(((g x1) x2) x3) x4左关联应用程序。


以上是Haskell中的函数-理解的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>