Taking Notes from http://learnyouahaskell.com
Curried functions
|
|
High order
|
|
map & filter
map
|
|
filter
|
|
lambda
|
|
map (+3) [1,6,3,2] VS map (\x -> x+3) [1,6,3,2]
fold
foldl foldr (foldl1 foldr1)
foldl1 与 foldr1 的行为与 foldl 和 foldr 相似,只是你无需明确提供初始值。他们假定 List 的首个(或末尾)元素作为起始值,并从旁边的元素开始折叠123456sum' :: (Num a) => [a] -> asum' xs = foldl (\acc x -> acc + x) 0 xssum' :: (Num a) => [a] -> asum' = foldl (+) 0
有点消除同类项的感觉. I like it.
|
|
scanl scanr (scanl1 scanr1)
scanl 和 scanr 与 foldl 和 foldr 相似,只是它们会记录下累加值的所有状态到一个 List
|
|
‘$’ function
定义12($) :: (a -> b) -> a -> b f $ x = f x
$看作是在右面写一对括号的等价形式
|
|
Function composition
|
|
|
|
point free style
|
|
函数若过于复杂,再使用 point free style 往往会适得其反,因此构造较长的函数组合链是不被鼓励的。更好的解决方法,就是使用 let 语句给中间的运算结果绑定一个名字,或者说把问题分解成几个小问题再组合到一起。这样一来我们代码的读者就可以轻松些,不必要纠结那巨长的函数组合链了
|
|