FilterMap 函数定义

Bes*_*eri -2 haskell functional-programming

我正在尝试获取一个程序,该程序首先从列表中过滤出与条件匹配的元素,然后根据也作为参数接收的函数映射元素。

filterMap :: (a -> b) -> (a -> Bool) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)

例如:

filterMap (+1) even [1..10] == [3,5,7,9,11]
filterMap (2^) (/=0) [0,1,0,2] == [2,4]
Run Code Online (Sandbox Code Playgroud)

Yur*_*nko 5

您似乎忘记了在尝试时指出问题本身。

但是,以下是您正在寻找的一些版本:

  • 简单版本,直接使用过滤器和映射:
filterMap :: (a->b) -> (a -> Bool) -> [a] -> [b]
filterMap mapping pred lst = map mapping (filter pred lst)
Run Code Online (Sandbox Code Playgroud)
  • 没有括号的版本:
filterMap mapping pred lst = map mapping $ filter pred $ lst
Run Code Online (Sandbox Code Playgroud)
  • 组合版本:
filterMap mapping pred = map mapping . filter pred
Run Code Online (Sandbox Code Playgroud)

在这里,我们摆脱了双方的争论(所谓的无点风格),并说我们的函数是一个过滤pred和映射的序列,嗯,mapping