map、filter

发布时间 2023-04-11 08:28:55作者: 牧羊龟

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的数字之前执行