我想知道,出于好奇心,这个函数是如何通过某种优化产生的中间表达式?我确实理解$实际上是一个函数,它只提供一个参数.不知何故,通过将这个函数应用到'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