如何在scheme或haskell中切换矩阵中的两行?

时间:2014-05-20 08:36:56

标签: haskell scheme

在使用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]]

1 个答案:

答案 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]]

是的,它可以!