gpt4 book ai didi

haskell - 尝试在 Haskell 中使用函数组合时出错

转载 作者:行者123 更新时间:2023-12-04 22:24:50 25 4
gpt4 key购买 nike

我最近才开始学习 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)

我哪里出错了?

最佳答案

您确信的尝试是您逻辑中的一个简单失败:点运算符的工作方式如下:
(f.g)(x) = f(g(x))
因此,尝试计算 5 的示例给出:
lessThanThen(greaterThanOne(5)) = lessThanTen(True) -- that can't be right, can it???
你想要的是一个 lambda 和 &&:
filter (\x-> (lessThanThen x) && greaterThanOne(x))
或者,您可以使用两个过滤器:
filter lessThanTen . filter greaterThanOne $

关于haskell - 尝试在 Haskell 中使用函数组合时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com