haskell学习笔记(2)-List Comprehension

数学中的集合有两种表达形式,分别是
列举法{1,2,3,4,5}
描述法{x|x<=5}
一般的编程语言只支持了列举法,支持描述法的寥寥无几,不过haskell就是其中的一种(python的列表推导算半个)


接下来用描述法来表示一些集合
[x*2 | x <- [1..10]]
#相当于[2,4,6,8,10,12,14,16,18,20]

[x*2 | x <- [1..10], x*2 >= 12]
#相当于[12,14,16,18,20]

因为对一组数据进行处理几乎是所有编程任务中最常见的几个,所以haskell特殊的描述法可以使非常多在一般编程语言里需要不停嵌套循环才能实现的任务,变的十分简单。

即使是对比一些流式函数式框架,例如java8的stream,rx函数式系列。haskell的列表描述法几乎也是代码量最少的。

举一些例子

#它能够使 List 中所有大于 10 的奇数变为 "BANG",小于 10 的奇数变为 "BOOM"
#haskell里控制语句也是表达式 例如if
boomBangs xs = [ if x < 10 then "BOOM!" else "BANG!" | x <- xs, odd x]
boomBangs [7..13]
#输出为 ["BOOM!","BOOM!","BANG!","BANG!"]

[ x*y | x <- [2,5,10], y <- [8,10,11]]
#输出[16,20,22,40,50,55,80,100,110]

[ x*y | x <-[2,5,10], y <- [8,10,11], x*y > 50]
#输出[55,80,100,110]

#求集合长度 _是占位符
length' xs = sum [1 | _ <- xs]
#返回一个集合 保留大写
removeNonUppercase st = [ c | c <- st, c `elem` ['A'..'Z']]
#嵌套
[ [ x | x <- xs, even x ] | xs <- xxs]

欢迎关注我的github https://github.com/luckyCatMiao

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值