将“ $”视为函数应用程序

时间:2019-02-26 08:11:09

标签: haskell functional-programming

我在阅读Learn You a Haskell for Great Good时遇到了这个例子。

ghci> map ($ 3) [(4+), (10*), (^2), sqrt]  
[7.0,30.0,9.0,1.7320508075688772]  

我不太明白如何将$当作函数应用程序。这是否意味着$是运算符?但是,如果是这样,在示例中它将如何与+*嵌套?我尝试了$ 3 4+$ 4 + 3,但都提出了parse error on input ‘$’。在函数式编程上下文中如何想到这样的表达式?

1 个答案:

答案 0 :(得分:13)

$确实是一个运算符,定义为:

f $ x = f x
-- or equivalently:
($) f x = f x

您上面的表达式与{{1}的定义)等价于:

map

[($ 3) (4 +), ($ 3) (10 *), ($ 3) sqrt] ($ 3)中的括号不是可选的。它们是operator section的一部分。基本上,可以使用四种方式使用中缀运算符(例如(4 +)):

  1. 两个参数之间:

    +
  2. 仅给出第一个参数:

    x + y
    
  3. 仅给出第二个参数:

    (x +)
    -- like \y -> x + y
    
  4. 没有参数:

    (+ y)
    -- like \x -> x + y
    

(+) -- like \x y -> x + y 等于($ 3) f等于f $ 3

f 3评估为($ 3) (4 +)评估为(4 +) $ 3评估为(4 +) 3评估为4 + 3