[Haskell] $

函数“$”称为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]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容