リストによる正方行列(つづき)

cf. 今日の一行 - リストによる正方行列処理

週をまたいでしまった。解答例もでてるけど。


問題3。これも内包表記で。

 boxing :: [[a]] -> [[a]]
 boxing m = [[m!!x!!y| x <- [0..l1], y <- [0..l1], x`div`l2 == i, y`div`l2 == j] | i <- [0..l3], j < - [0..l3]]
   where
     l1 = length m - 1
     l2 = (floor . sqrt . fromIntegral . length) m
     l3 = l2 -1

行列のサイズから n を求めるとこで型が合わずにはまった( sqrt は (Floating a) => a -> a ,必要なのは Int)。結局 floor を使った。