gpt4 book ai didi

list - 使用map函数时如何访问下一个元素?

转载 作者:行者123 更新时间:2023-12-05 08:49:01 25 4
gpt4 key购买 nike

我正在尝试对 haskell 中列表的每个元素应用一个函数。因此,我正在使用 map 函数。我的代码应该将下一个元素的值添加到当前元素。

所以我认为我的代码应该看起来像这样:

test :: [Rational]
test = map (\x -> x % {-somehow get next element -}) listT

listT 是 Int 类型的无限列表。

但是我如何“访问”下一个值?谢谢你的帮助

最佳答案

要访问下一个元素,映射到 tails 相反:

mapWithNext op xs = map g (tails xs)
where
g (x:y:_) = Just (op x y)
g _ = Nothing

因为当没有下一个元素时,您的 op不能应用,尽管它只会发生在有限列表中。您可能知道输入列表将是无限的,但您的类型却不知道,所以安全起见最好。

您可能想要添加一个后处理步骤来摆脱最后的 Nothing (s) 并提取 Just值。 catMaybes :: [Maybe a] -> [a] 似乎适用。

当然使用zipWith (*) 评论中提到的更清晰,更切题,在这里;但是这样用 tails通常更通用,即更容易修改以与例如一起使用三元 op等。与zipWith我们必须使用一系列嵌套的 zipWith应用程序和构建人工元组只是为了访问元素;与 tails我们根本不需要做那样的事情。

map 的组合(通常, foldr )与 tails实际上是emulating 同构It has its merits例如在 Common Lisp 中,它实际上作为库函数存在 maplist .

(*) 你可以说,zipWith 不是 map ,但是例如在 Scheme 中是这样。在那里,map接受任意数量的参数列表,以及相应元数的组合操作。但当然 Haskell 不是 Scheme。

关于list - 使用map函数时如何访问下一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65291024/

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