haskell - 替换列表列表中的第 n 项

标签 haskell

我正在研究简单的函数,用列表列表替换列表列表中的第 n 项。

输入:replaceNth 2 [["0","1"],["8","8"]] [["2","3"],["1","2"],["3","4"],["9","12"]]

预期输出:[["2","3"],["1","2"],["0","1"],["8","8"], [“9”,“12”]]

目前我得到的以下代码无法正常工作。

replaceNth n newVal (x:xs)
    | n == 0 = newVal:[xs]
    | otherwise = [x]++replaceNth (n-1) newVal xs

你能帮我修复这个功能吗?

最佳答案

您的代码几乎是正确的,您需要将 newVal 与列表的其余部分连接起来,以便进行类型检查。您还可以使用模式匹配来代替防护。

replaceNth 0 newVal (x:xs) = newVal ++ xs 
replaceNth n newVal (x:xs) = x : replaceNth (n-1) newVal xs

要完成此功能,您需要提供空列表的情况(如果适用)

关于haskell - 替换列表列表中的第 n 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49603403/

相关文章:

当我从文件读取 map 时,Haskell 比 Python 需要更多的内存。为什么?

haskell - 我的第一个 Haskell 程序有哪些可以改进的地方?

haskell - Haskell 上有 getInt 函数吗?

Haskell - 用防护罩替换外壳

Haskell SDL : Can't find mingw32. dll

haskell - 如何编写使用 ReaderT 和 Either 运行的函数?

haskell - 具有多种参数类型的多态输入函数

haskell - 我如何解释这篇论文上的打字规则?

haskell - 使用 Megaparsec 解析数组 [1][2] 时出现问题

haskell - 如何在偶数索引和奇数索引中选择元素?