Haskell学习-函数式编程初探 (3)

list comprehension
list comprehension 相当于map 和 filter的函数的增强版, | 之前等于map, | 之后等于filter, 尤其在多限制条件和同时实现map,filter功能时更加明显。是个非常强大和有用的特性,完全可以替代列表的 map 和 filter 函数。
list comprehension 其实是由 monadapplicative functor 生成的语法糖。

[x*2 | x <- [1..10], x*2 >= 12] -- 取乘以 2 后大于等于 12 的元素, 等于map结合filter > [12,14,16,18,20] [if x `mod` 2 == 0 then "even" else "odd" | x <- [1..10]] -- 偶数转换为even,基数为odd, 等于map > ["odd","even","odd","even","odd","even","odd","even","odd","even"] [ x | x <- [10..20], x /= 13, x /= 15, x /= 19] -- 取除了13、15、19之外的元素,多个限制条件,等于filter > [10,11,12,14,16,17,18,20] [ x*y | x <- [2,5,10], y <- [8,10,11]] -- 求两个列表所有可能的组合 > [16,20,22,40,50,55,80,100,110] -- 嵌套的列表, 在不拆开它的前提下除去其中的所有奇数 let xxs = [[1,3,5,2,3,1,2,4,5],[1,2,3,4,5,6,7,8,9],[1,2,4,2,1,6,3,1,3,2,3,6]] [ [ x | x <- xs, even x ] | xs <- xxs] > [[2,2,4],[2,4,6,8],[2,4,2,6,2,6]] --取得所有三边长度皆为整数且小于等于 10,周长为 24 的直角三角形 [ (a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2, a+b+c == 24] > [(6,8,10)]

参考资料

《HASKELL 趣学指南》
《Real World Haskell》

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzdzz.html