gpt4 book ai didi

list - 根据元素索引修改列表的元素

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

使用 haskell :

假设我有列表:[1,3,4,2,3]我想修改列表中的所有 3。我知道在这种情况下我可以应用它来选择 3:

map (\x -> if p x then f x else x) xs 

但是,应用于三元组的函数取决于它们在列表中的索引。

例如,如果将索引添加到所需的数字,我要使用的函数的输出将是:[1,4,4,2,7]

最佳答案

您可以使用 zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]为此:

<b>zipWith</b> (\<b>i</b> x -> if p x then f <b>i</b> x else x) <b>[0..]</b> xs

因此,fi(索引)和 x(元素)都考虑在内。

例如:

zipWith (\i x -> if x == 3 then (i+x) else x) [0..] xs

生成所需的输出:

Prelude> let xs = [1,3,4,2,3]
Prelude> zipWith (\i x -> if x == 3 then (i+x) else x) [0..] xs
[1,4,4,2,7]

您可以将此逻辑封装到一个单独的函数中,例如 imap::(Enum n, Num n) => (n -> a -> b) -> [a] -> b:

imap :: (Enum n, Num n) => (n -> a -> b) -> [a] -> b
imap = flip zipWith [0..]

这将适用于作为 NumEnum 实例的任何类型(因此 IntegerInt , float ,...).

关于list - 根据元素索引修改列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44984791/

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