map
- map接受一个函数和一个列表,并将该函数应用于该列表中的每个项,从而生成一个新列表
- map是一种高阶函数,它非常通用,可以以数百万种不同的方式使用
如下
map (map (^)) [[1,2], [3,4,5,6], [7,8]]
map可以用内涵列表实现
filter
- filter接受一个谓词(谓词是一个返回Bool的函数)和一个列表,并返回满足谓词的元素列表
如下
filter (> 3) [1,5,3,2,1,6,4,3,2,1]
filter (== 3) [1,2,3,4,5]
filter even [1..10]
所有这些也可以通过内涵列表实现,你需要根据上下文决定哪个风格更好
- 你创建了一个函数,该函数接受一个值产生一个结果,我们将该函数map到列表中的所有项上,然后filter结果列表以满足我们的搜索
takeWhile
如下
sum (takeWhile (< 10000) (filter odd (map (^ 2) [1..])))
- haskell特有的惰性计算,让我们可以map和filter一个无限列表,因为它实际上不会map和filter到最后,它会延迟操作,只有当我们强迫Haskell告诉我们结果时才知道需要这些数字
- takeWhile强制map和filter,但只在找到大于或等于10000的数字之前执行