gpt4 book ai didi

list - 将函数应用于列表中的每个第二个元素

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

我想对列表中的每个第二个元素应用一个函数:

> mapToEverySecond (*2) [1..10]
[1,4,3,8,5,12,7,16,9,20]

我写了以下函数:
mapToEverySecond :: (a -> a) -> [a] -> [a]
mapToEverySecond f l = map (\(i,x) -> if odd i then f x else x) $ zip [0..] l

这行得通,但我想知道是否有更惯用的方式来做这样的事情。

最佳答案

我没有写太多 Haskell,但首先想到的是:

func :: (a -> a) -> [a] -> [a]
func f [] = []
func f [x] = [x]
func f (x:s:xs) = x:(f s):(func f xs)

这有点不合时宜,因为您不仅要处理空列表,还要处理包含一个元素的列表。这也不能很好地扩展(如果你想要每三分之一,或者

正如@Landei 指出的那样,一个人可以做,然后写
func :: (a -> a) -> [a] -> [a]
func f (x:s:xs) = x:(f s):(func f xs)
func f xs = xs

为了摆脱对 [] 的丑陋检查和 [x] ,不过,恕我直言,这使得它有点难以阅读(至少是第一次)。

关于list - 将函数应用于列表中的每个第二个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28256830/

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