1

showリストのリストで指定された行列の行を印刷するために使用するのに問題があります。

私はこれを持っています:

data Matrix = Mat Int [[Bit]] 
    deriving Eq

ここで、引数Intは正方行列の次数でありBit、Int(0または1)です。私のコードは、次Matrixのインスタンスとして次のことを実行できるようにする必要がありますShow

Main> Mat 3 [[0,0,1],[1,0,1],[1,1,1]
[0,0,1]
[1,0,1]
[0,0,1]

これまでのところ私は持っているだけです:

instance Show Matrix where
    show (Mat i (x:xs)) = (show x) ++ "\n"

しかし、これは明らかに最初のリストのみを返します。この問題を手伝ってくれませんか。前もって感謝します。

4

1 に答える 1

8

簡単な方法は、showすべての行に対して、それぞれ独自の行に配置することです。

instance Show Matrix where
    show (Mat _ rows) = unlines $ map show rows

それのわずかな欠点は、最後の行の後に改行も追加することです。それを避けるために、次を使用できます

instance Show Matrix where
    show (Mat _ rows) = intercalate "\n" $ map show rows

( for のインポートが必要Data.Listですintercalate)

于 2012-12-12T19:10:23.473 に答える