転置行列
30分プログラム、その105。Haskellで転置行列。http://www.agusa.i.is.nagoya-u.ac.jp/person/mzp/hiki/?exerciseより。
転置行列なんて使わねーよ、と思って放置していたけど、昨日使ったので。
使い方
*Main> transpose [[1,2,3],[4,5,6],[7,8,9]] [[1,4,7],[2,5,8],[3,6,9]]
ソースコード
QuickCheck(id:mzp:20070729:quick)によるテスト付き。
import Test.QuickCheck empty :: [a]->Bool empty [] = True empty _ = False transpose :: [[a]]->[[a]] transpose [] = [] transpose m@(x:_) | empty x = m | otherwise = map (\n->map (!! n) m) [0..length x-1] pRevert :: [[Int]] -> Property pRevert [] = True ==> 0 == length (transpose (transpose [])) pRevert m@(x:xs) = and (map (\y-> length y== length x) xs) ==> transpose (transpose m) == m main = quickCheck pRevert
参考
- 過去の30分プログラム
- id:mzp:20070729:quick