在使用map函数对矩阵进行转置后,我试图这样做,但仍然无法弄清楚如何在矩阵中交换两行。 我是函数式编程的初学者,正在努力学习。 这是我的转置代码:
transpose ::[[Int]]->[[Int]]
transpose([]:_)=[]
transpose x = ((map head x):(transpose (map tail x)))
我想做一些与此类似的事情: 切换/交换矩阵的两行
[[1,2,3] [[4,5,6]
[4,5,6] => [1,2,3]
[7,8,9]] [7,8,9]]
答案 0 :(得分:2)
啊,你让它变得比它需要的更复杂。我假设你总是要交换前两行。如果它是一个简单的列表,你会怎么做呢,例如......
[a, b, c, d] => [b, a, c, d]
你可能会写这样的东西:
swapFirstTwo (a:b:xs) = b:a:xs
swapFirstTwo xs = xs -- if there are <2 elements
如果我们将其加载到GHCi中,我们可以询问swapFirstTwo
的类型签名是什么。
λ> :t swapFirstTwo
swapFirstTwo :: [a] -> [a]
因此swapFirstTwo
可以列出任何内容。它可以处理列表列表吗?
λ> swapFirstTwo [[1,2,3], [4,5,6], [7,8,9]]
[[4,5,6],[1,2,3],[7,8,9]]
是的,它可以!