本博客所有内容是原创,未经书面许可,严禁任何形式的转载。
http://blog.csdn.net/u010255642
Scanl1、scanr1与foldl1、foldr1类似,读取第一个元素,然后以第二个元素为起始元素,scanl1从左边开始,scanr1从右边开始。
*Main> scanl1 (\mmin x->if x<mmin then x else mmin) [61,53,75,28]
[61,53,53,28]
18、函数应用与函数合成
$函数完成函数应用,拥有最低的优先级,可以用它来替换括号,因为括号通常标识优先级一样的情况下函数的调用先后顺序。
*Main> sum (filter odd [1,5,8,9,12,16])
15
*Main> sum $filter odd [1,5,8,9,12,16]
*Main> sum (filter odd (scanl (+) 0 [1,5,8,9,12,16]))
110
*Main> sum $filter odd $scanl (+) 0 [1,5,8,9,12,16]
110
.完成函数合成,函数合成将很多函数合成为一个序列,执行的顺序是从左到右,即:f.g.h x=f(g(h x))
*Main> map ((>5).mycpd) [1,2,4,8,10,11]
[False,False,True,True,True,True]
*Main> map ((>5).mycpd.abs) [1,-2,4,8,-10,11]
[False,False,True,True,True,True]
*Main>
18、Data.List模块
可通过下面2种方式引入Data.List模块,其它模块也类似
1、 :m + Data.List
2、 import Data.List
也可以只引入其中的某几个函数,下面我们引入intersperse和intercalate函数。
Prelude> import Data.List (intersperse,intercalate)
Intercalate将列表中的元素以第一个参数表示的列表为间隔符组装成一个列表。intersperse将列表中的元素以第一个参数表示的列表为间隔符组装成列表中的元素。
Prelude Data.List> intercalate " " ["health","is","very","important."]
"health is very important."
Prelude Data.List> intercalate [12,0] [[2,2,2],[3,3,3],[4,4,4],[5,5,5]]
[2,2,2,12,0,3,3,3,12,0,4,4,4,12,0,5,5,5]
Prelude Data.List>
Prelude Data.List> intersperse '*' "health"
"h*e*a*l*t*h"
Prelude Data.List> intersperse 12 [222,333,444,555]
[222,12,333,12,444,12,555]
我们移去Data.List的模块,再重新加载它的所有函数
Prelude Data.List> :m - Data.List
Prelude> import Data.List
Transpose将多个列表的元素分别抽取合成同样多的列表。
Prelude Data.List> transpose [[1,2,3],[4,5,6],[7,8,9]]
[[1,4,7],[2,5,8],[3,6,9]]
Prelude Data.List> transpose [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
[[1,4,7,10],[2,5,8,11],[3,6,9,12]]
与zip类似,但zip只接收2个列表为参数,生成的列表的元素是元组。
Prelude Data.List> zip [1,2,3] [4,5,6]
[(1,4),(2,5),(3,6)]
Prelude Data.List>
Concat将所有的列表元素组合成一个新列表
Prelude Data.List> concat [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
[1,2,3,4,5,6,7,8,9,10,11,12]
Prelude Data.List>