[Haskell] .

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

函数“.”称为function composition,定义如下:

(.) :: (b -> c) -> (a -> b) -> a -> c
f . g = \x -> f (g x)

我们看到,函数f接受函数g的返回值作为参数。
函数复合以后返回一个函数f . g,它的类型为a -> cag的入参类型,cf的返回值类型。

例如:
<u></u>negate . (* 3)返回一个函数,这个函数接受一个数字作为参数,乘以3然后取反。

函数复合的一种应用是动态创建一个复合函数,传递给其他高阶函数。虽然我们总是可以使用lambda来实现它,但是函数复合通常会更清晰简洁。
例如:

ghci> map (\x -> negate (abs x)) [5, -3, -6, 7]
[-5, -3, -6, -7]

因为\x -> negate (abs x) = negate . abs,所以,我们可以改写为:

ghci> map (negate . abs) [5, -3, -6, 7]
[-5, -3, -6, -7]

函数复合是右结合的,所以我们可以一次复合多个函数。

f (g (z x)) = (f . g . z) x

注:
使用函数“$”,还可以改写:

f (g x) = f $ g x = f $ g $ x
(f . g . z) x = f . g . z $ x

相关文章

  • 函数式的宗教-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/rdunkttx.html