小编Arm*_*pen的帖子

Haskell参数通过'map'中的'$ x'应用于inflix运算符函数列表.它是如何工作的?

我想知道,出于好奇心,这个函数是如何通过某种优化产生的中间表达式?我确实理解$实际上是一个函数,它只提供一个参数.不知何故,通过将这个函数应用到'map'提供的列表中的函数,它设法看到'$'函数缺少一个函数,正如我所提到的那样是由'map'提供的.这种优化行为对于'$'的函数应用程序来说是独一无二的吗?因为,为了它的价值我无法看到它将如何从'map'和'$'的函数定义中得到,我在下面提供了方便.

从一开始,似乎'$ 3'应该出现在函数表达式之前,但是这样的表达式不会在编译器中进行评估.这是优化的扩展中间表达式,似乎正在发生:

[(4+) $3, (10*) $3, (^2) $3, sqrt $3]
Run Code Online (Sandbox Code Playgroud)

定义 - $

($) :: (a -> b) -> a -> b  
f $ x = f x
Run Code Online (Sandbox Code Playgroud)

定义 - 地图

map :: (a -> b) -> [a] -> [b]  
map _ [] = []  
map f (x:xs) = f x : map f xs  
Run Code Online (Sandbox Code Playgroud)

使用的例子

map ($ 3) [(4+), (10*), (^2), sqrt]
Run Code Online (Sandbox Code Playgroud)

返回结果

[7.0,30.0,9.0,1.7320508075688772]
Run Code Online (Sandbox Code Playgroud)

optimization haskell functional-programming list map-function

1
推荐指数
1
解决办法
113
查看次数