您的位置:首页 > 其它

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
(.) . (.) . (.)

(.....)= (.) . (.) . (.)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: