[Haskell] $

作者: 何幻 | 来源:发表于2016-03-04 07:14 被阅读234次

    函数“$”称为function application operator,定义如下:

    ($) :: (a -> b) -> a -> b
    f $ x = f x
    

    与函数调用不同的是,函数调用具有高优先级,而“$”具有最低优先级
    函数调用具有左结合性,而“$”具有右结合性

    f a b c = ((f a) b) c
    f $ g $ h $ x = f $ (g $ (h $ x))
    

    使用“$”可以减少括号。

    例如:

    sum (map sqrt [1..130]) = sum $ map sqrt [1..130]
    sqrt (3 + 4 + 9) = sqrt $ 3 + 4 + 9
    sum (filter (> 10) (map (* 2) [2..10])) = sum $ filter (> 10) $ map (* 2) [2..10]
    

    我们可以等价的认为,把“$”替换成一个左括号,然后在表达式的最有表加上一个右括号。

    除了可以减少括号,“$”还可以把函数调用当做一个函数来对待。

    ($ 3) :: (Int -> b) -> b
    

    它是一个函数,接受一个函数作为参数,返回这个参数函数作用到3的结果。

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

    相关文章

      网友评论

        本文标题:[Haskell] $

        本文链接:https://www.haomeiwen.com/subject/tdunkttx.html