2014-05-20 35 views
-3

我正在嘗試使用map函數對矩陣進行轉置後執行此操作,但仍無法弄清楚如何交換矩陣中的兩行。 我是功能性編程的初學者,並試圖學習。 這是我轉碼:如何在方案或haskell中切換矩陣中的兩行?

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

你可能會花更多的時間來澄清你的問題;就目前而言,你究竟在做什麼並不是很清楚(當然這與矩陣有關,但是例如你甚至沒有提到你如何定義一個矩陣 - 而且我很有興趣看到你如何用地圖定義轉置,這聽起來有點奇怪 - 轉置是一種結構化操作,地圖只顯示包含的值)。 – Cubic

+0

歡迎來到StackOverflow。你試過什麼了?請張貼您最佳嘗試的代碼。這會讓你的問題更適合網站,你可能會得到更好的答案。 – richj

+0

我編輯了這個問題,幷包含了我想要的內容和轉置代碼的示例 – user3370608

回答

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

是的,它可以!