[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]

相关文章

  • 函数式的宗教-00: 认识lisp(clojure)与haske

    总体大纲: lisp与haskell简单介绍 lisp与haskell应用领域 lisp与haskell技术分析 ...

  • monad以及monad的四条定理

    haskell的范畴是hask范畴(haskell的所有类型隶属于hask范畴),所以haskell的所有函子都是...

  • 01 数据类型

    swift中结构体在haskell中的描述 枚举类型在haskell中的描述 枚举携带类型在haskell中描述 ...

  • Haskell学习-函数式编程初探

    原文地址:Haskell学习-函数式编程初探  为什么要学习函数式编程?为什么要学习Haskell?  .net到...

  • Haskell

    [TOC] Haskell GHCI 通过Tab可以自动补全 通过 :browser 模块名称,浏览该模块下的函数...

  • haskell

    我在这里只是表达此刻内心想到的一些事情,或者记录自己关于最近学习生活工作的想法。 从我这一周对haskell的学习...

  • [Haskell] $

    函数“$”称为function application operator,定义如下: 与函数调用不同的是,函数调用...

  • [Haskell] .

    函数“.”称为function composition,定义如下: 我们看到,函数f接受函数g的返回值作为参数。函...

  • haskell

    stack --resolver lts-9 install ghc-mod Haskell-ghc-mod ::...

  • nginx-haskell-module

    nginx-haskell-module 是一个 nginx 的扩展模块,有了它我们就可以用 haskell 来写...

网友评论

    本文标题:[Haskell] $

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