Haskell语言学习笔记(11)Point-Free
2017-02-25 11:40
531 查看
本文内容来自 "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 length totalNumber = aggregate length where aggregate f = sum . map f
eta-abstraction
An eta-abstraction is adding of abstraction over a function.aggregate f = sum . map f aggregate f xs = sum . map f $ xs aggregate f xs = sum $ map f xs aggregate f xs = sum (map f xs)
eta-reduction
An eta-reduction is dropping of abstraction over a function.aggregate f = sum . map f aggregate f = (.) sum (map f) aggregate f = (.) sum $ map f aggregate f = (.) sum . map $ f aggregate = \f -> (.) sum . map $ f aggregate = (.) sum . map aggregate = (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 .) . g f ... g = \x y -> f (g x y) f ... g = \x y -> f $ g x y f ... g = \x y -> f . g x $ y f ... g = \x -> (.) f (g x) f ... g = \x -> (.) f $ g x f ... g = \x -> (.) f . g $ x f ... g = (.) f . g f ... 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 (...) = (.) . (.)
三个参数的情况
\x y z = f (g x y z) \x y z = f . (g x y) $ z \x y = f . (g x y) \x y = (f .) . (g x) $ y \x = (f .) . (g x) \x = ((f .) .) g $ x ((f .) .) . g \f g = ((f .) .) . g \f g = (.) ((f .) .) g \f g = (.) . ((f .) .) $ g \f = (.) . ((f .) .) \f = (.) . ((.) ((.) f)) \f = (.) . (.) . (.) $ f (.) . (.) . (.) (.....)= (.) . (.) . (.)
相关文章推荐
- Haskell语言学习笔记(25)MonadState, State, StateT
- Haskell语言学习笔记(4)Functor
- Haskell语言学习笔记(48)Data.Tuple
- Haskell语言学习笔记(20)IORef, STRef
- Perl语言学习笔记 11 Perl模块
- 32位汇编语言学习笔记(11)--条件传送指令
- Haskell语言学习笔记(36)Data.List.Zipper
- Haskell语言学习笔记(26)Identity, IdentityT
- Haskell语言学习笔记(53)Data.Sequence
- Haskell语言学习笔记(49)ByteString Text
- Haskell语言学习笔记(37)RWS, RWST
- Haskell语言学习笔记(43)Parsec(2)
- Haskell语言学习笔记(27)Endo, Dual, Foldable
- go语言学习笔记11
- Haskell语言学习笔记(54)Data.Set
- Haskell语言学习笔记(9)State Monad
- Haskell语言学习笔记(10)Writer Monad
- Haskell语言学习笔记(13)Monadic Functions
- Haskell语言学习笔记(50)Extra
- Haskell语言学习笔记(21)Array