0 haskell functional-programming
我在阅读" 了解你是一个很好的Haskell"时遇到了这个例子.
ghci> map ($ 3) [(4+), (10*), (^2), sqrt]
[7.0,30.0,9.0,1.7320508075688772]
Run Code Online (Sandbox Code Playgroud)
我不太明白如何将其$视为功能应用程序.这是否意味着$是运营商?但如果是这样,怎么会被嵌套+或*在例子吗?我试过了$ 3 4+,$ 4 + 3但都提出来了parse error on input ‘$’.如何在函数式编程上下文中考虑这样的表达式?
mel*_*ene 12
$ 确实是一个运营商,定义为:
f $ x = f x
-- or equivalently:
($) f x = f x
Run Code Online (Sandbox Code Playgroud)
您上面的表达式(通过定义map)等效于:
[($ 3) (4 +), ($ 3) (10 *), ($ 3) sqrt]
Run Code Online (Sandbox Code Playgroud)
在括号($ 3)和(4 +)是不可选的.它们是所谓的操作员部分的一部分.基本上,有四种方法可以使用中缀运算符(例如+):
两个论点之间:
x + y
Run Code Online (Sandbox Code Playgroud)只给出第一个参数:
(x +)
-- like \y -> x + y
Run Code Online (Sandbox Code Playgroud)只给出第二个参数:
(+ y)
-- like \x -> x + y
Run Code Online (Sandbox Code Playgroud)没有参数:
(+)
-- like \x y -> x + y
Run Code Online (Sandbox Code Playgroud)($ 3) f评估以f $ 3评估为f 3.
($ 3) (4 +)求值以(4 +) $ 3进行求值以(4 +) 3进行求值以4 + 3进行求值7.