Haskell语言学习笔记(11)Point-Free
来源:互联网 发布:openwrt 修改管理端口 编辑:程序博客网 时间:2024/05/14 02:29
本文内容来自 "Point-Free or Die: Tacit Programming in Haskell and Beyond" by Amar Shah
Point-Free
\x -> outside (inside x)\x -> outside $ inside x\x -> outside . inside $ x outside . inside
aggregate
totalNumber = sum . map lengthtotalNumber = aggregate length where aggregate f = sum . map f
eta-abstraction
An eta-abstraction is adding of abstraction over a function.aggregate f = sum . map faggregate f xs = sum . map f $ xsaggregate f xs = sum $ map f xsaggregate f xs = sum (map f xs)
eta-reduction
An eta-reduction is dropping of abstraction over a function.aggregate f = sum . map faggregate f = (.) sum (map f)aggregate f = (.) sum $ map faggregate f = (.) sum . map $ faggregate = \f -> (.) sum . map $ faggregate = (.) sum . mapaggregate = (sum .) . map
combinator
A combinator is a function with no free variables, that is, a pure lambda-expression that refers only to its arguments.\f g -> (f .) . g\f g x -> (f .) . g $ x\f g x -> (f .) $ g x\f g x -> (f .) (g x)\f g x -> f . g x\f g x y -> f . g x $ y\f g x y -> f $ g x y\f g x y -> f (g x y)
黑鸟(blackbird)组合运算符 (...)
The blackbird combinator is the composition of composition and composition.f ... g = (f .) . gf ... g = \x y -> f (g x y)f ... g = \x y -> f $ g x yf ... g = \x y -> f . g x $ yf ... g = \x -> (.) f (g x)f ... g = \x -> (.) f $ g xf ... g = \x -> (.) f . g $ xf ... g = (.) f . gf ... g = (f .) . g(...) = (.) . (.)(...) = \f g -> (f .) . g(...) = \f g -> (.) f . g(...) = \f g -> (.) (f .) $ g(...) = \f -> (.) (f .)(...) = \f -> (.) ((.) f)(...) = \f -> (.) $ (.) f(...) = \f -> (.) . (.) $ f(...) = (.) . (.)aggregate f xs = sum (map f xs)aggregate = sum ... map
(...) 与 (.)
f . g = \x -> f (g x)f ... g = \x y -> f (g x y)f ... g = (f .) . g(...) = (.) . (.)
0 0
- Haskell语言学习笔记(11)Point-Free
- Haskell语言学习笔记(1)
- Haskell语言学习笔记(2)
- Haskell语言学习笔记(4)Functor
- Haskell语言学习笔记(5)Applicative
- Haskell语言学习笔记(6)Monad
- Haskell语言学习笔记(8)Monoid
- Haskell语言学习笔记(14)Foldable
- Haskell语言学习笔记(16)Alternative
- Haskell语言学习笔记(17)MonadPlus
- Haskell语言学习笔记(18)Traversable
- Haskell语言学习笔记(21)Array
- Haskell语言学习笔记(22)MaybeT
- Haskell语言学习笔记(29)CPS
- Haskell语言学习笔记(31)ListT
- Haskell语言学习笔记(35)Contravariant
- Haskell语言学习笔记(39)Category
- Haskell语言学习笔记(42)Bifunctor
- 系统学习深度学习(十一)--dropout,dropconect
- 实现懒加载
- selenium之 定位以及切换frame(iframe)
- 单独改变AlertDialog的显示Theme
- LICEcap方便快捷制作gif图片的工具
- Haskell语言学习笔记(11)Point-Free
- SEO
- [BZOJ1176][[Balkan2007]Mokia][CDQ分治]
- 一些自己的随手笔记,比较混乱
- 关于httpservletRequest碰到的一个问题
- 深入理解计算机系统之整型与浮点型
- C++深拷贝和浅拷贝
- vs编译后不拷贝
- 浅谈ListView、RecycleView、GridView的使用方法步骤和效果区别.TXT