首页 > 解决方案 > Haskell 高阶滤波函数

问题描述

filter :: (a -> Bool) -> [a] -> [a]
filter (\x -> x % 2 == 0) [1,2,3,4,5]

我已经编写了上面的代码。我想从列表中获取满足布尔表达式 x % 2 == 0 条件的列表匿名数字返回数字

当我运行此代码时,出现错误

解析错误:顶层的裸表达式也许您打算使用 TemplateHaskell

作为haskell的新手,我不知道该怎么做

标签: haskellhigher-order-functions

解决方案


摆脱类型签名(filter已定义)并使用调用来定义新变量。

even_numbers = filter (\x -> x % 2 == 0) [1,2,3,4,5]

(顺便说一下,even是预定义的;你可以只写filter even [1,2,3,4,5]。)

如果您尝试定义硬编码谓词的版本filter

even_numbers :: [a] -> [a]
even_numbers xs = filter even xs

推荐阅读