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

(需要导入Data.Listfor intercalate

于 2012-12-12T19:10:23.473 回答