代码之家  ›  专栏  ›  技术社区  ›  TW80000

Haskell标准库中是否有函数替换列表中的项?

  •  1
  • TW80000  · 技术社区  · 7 年前

    我想要一个函数 f :: Int -> a -> [a] -> [a] 其中,返回值是第三个参数,索引中的项由第一个参数替换为第二个参数。

    f 1 42 [1, 2, 3] == [1, 42, 3]
    

    我在Hoogle上查找带有该签名的函数,但没有找到任何与我所寻找的匹配的函数。

    3 回复  |  直到 7 年前
        1
  •  6
  •   Daniel Wagner    7 年前

    不,没有这样的功能。此外,想要这是一个坏兆头;如果您经常需要索引,请考虑使用比列表更合适的数据结构。

        2
  •  1
  •   Will Ness Derri Leahy    7 年前

    由于列表很短,重复索引可能具有可接受的性能。

    replix :: Int -> a -> [a] -> [a]
    replix i x xs | i >= 0 = let (h,_:t) = splitAt i xs
                             in h ++ [x] ++ t
    

    splitAt :: Int -> [a] -> ([a], [a]) .

        3
  •  0
  •   Anders Kaseorg    7 年前

    使用 lens

    import Control.Lens
    
    f :: Int -> a -> [a] -> [a]
    f i = set (ix i)
    
    推荐文章