【发布时间】:2021-01-18 14:21:55
【问题描述】:
我对我的示例有一个非常具体的问题。
我的目标是改变矩阵中的某个值,然后返回整个矩阵。
到目前为止我的代码:
replace :: [a] -> (Int,a) -> [a]
replace [] _ = []
replace (_:xs) (0,a) = a:xs
replace (x:xs) (n,a) =
if n < 0
then (x:xs)
else x: replace xs (n-1,a)
setEntry :: [[Int]] -> Int -> Int -> Int -> [Int]
setEntry x i j aij = replace (x!!(i-1)) ((j-1),aij)
我的目标是达到以下目标:
setEntry [[1,2,3],[3,2,1],[1,2,1]] 2 2 9
结果
[[1,2,3],[3,9,1],[1,2,1]]
我当前的代码仅输出值已更改的行。 所以在这种情况下:
[3,9,1]
我知道,我必须将输出类型更改为 [[Int]] 才能接收整个矩阵,但现在我将它放在列表类型上,因为这是该方法的作用。
我不明白,我如何才能返回整个矩阵,尤其是因为我必须复制它,不是吗?
我非常感谢任何形式的帮助。
提前谢谢你!
【问题讨论】:
-
提示:您需要调用
replace两次,一次用于行,一次用于列。 -
谢谢!我花了最后 15 分钟尝试这个,但我似乎是脑死什么的。我还没有弄清楚如何在整个矩阵上调用替换。你介意再给我一个提示吗? :)
-
您当前正在生成是
i-1th 行的结果。那么,如果将原始矩阵的整个i-1th 行替换为刚刚生成的结果会怎样?请记住,当a ~ [x]时,replace函数的类型变为[[x]] -> (Int, [x]) -> [[x]],它可以完美地用作矩阵的“行替换”函数。
标签: list haskell matrix methods output