gpt4 book ai didi

list - 在haskell的新函数中使用过滤列表

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

所以我不太确定如何正确表达这一点,但是说我想得到一个列表中所有奇数的总和,我有两个函数(sumList 和 getOddNumbers)并将它们组合成 sumOddList 还是存在一种将这两者放在一个函数中的方法?如果没有更好的功能,我将如何将它们组合成 sumOddList?

getOddNumbers :: [Integer] -> [Integer]
getOddNumbers [] = []
getOddNumbers (x:xs)
|odd x = x:getOddNumbers xs
|otherwise = getOddNumbers xs

sumList :: [Integer] -> Integer
sumList list = case list of
[] -> 0
(x:xs) -> x + (sumList xs)

我还问主要是因为将两个 diff 函数放在一起是我以前在使用 CodeWorld 放置颜色和形状以输出该颜色的形状时遇到的问题。

谢谢

(注意:我使用 Haskell 已经超过 5 周了,显然我完全是个菜鸟)

最佳答案

将输出作为输入传递给(另一个)函数

你基本上想要做的是使用 getOddNumbers输出作为sumList输入函数,所以我们可以定义一个 sumOddList作用为:

sumOddList :: [Integer] -> Integer
sumOddList l = sumList (getOddNumbers l)

这里 l是我们要处理的列表,因此结果是对 getOddNumbers l 结果的函数应用(使用 sumList 函数)。

链接函数:(.)功能

上述模式很常见:我们经常希望首先通过函数 g 传递数据, 以及通过函数 f 得到的结果. Haskell 有 (.) :: (b -> c) -> (a -> b) -> a -> c 函数“链接”函数。因此,我们可以链接 sumListgetOddNumbers一起喜欢:

sumOddList :: [Integer] -> Integer
sumOddList = (.) sumList getOddNumbers

请注意,我们不再使用 l参数在这里。 sumOddList在这里定义为“管道”,其中数据首先传递到 getOddNumbers ,然后由sumList“后处理”功能。

(.)函数也可以用作中缀运算符:

sumOddList :: [Integer] -> Integer
sumOddList = sumList . getOddNumbers

关于list - 在haskell的新函数中使用过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52034032/

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