我最近才开始学习 Haskell,更具体地说是函数组合、部分函数、映射、过滤器和切片等主题。在其中一项练习中,要求twoFilters
使用函数组合来修改函数。
我已经阅读了一些 wiki,.
但很难让它正常工作。据我了解,它通过b . a
按字母顺序执行功能并返回结果来工作。换句话说x = foo a
,然后foo b of x
。然而,在使用以下两个过滤器函数应用几个“变体/可能性”之后,由于错误,我无法编译它。
greaterThanOne :: Int -> Bool
greaterThanOne = (>1)
lessThanTen :: Int -> Bool
lessThanTen = (<10)
twoFilters :: [Int] -> [Int]
twoFilters xs= filter lessThanTen (filter greaterThanOne xs)
这两个是我最有信心的不成功的尝试;
twoFilters xs = filter (lessThanTen . greaterThanOne xs)
twoFilters xs = filter (lessThanTen xs . greaterThanOne xs)
我的推理在哪里错了?