haskell(21)


本博客所有内容是原创,未经书面许可,严禁任何形式的转载。

http://blog.csdn.net/u010255642


Scanl1scanr1foldl1foldr1类似,读取第一个元素,然后以第二个元素为起始元素,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> 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值