我在使用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"
但这显然只返回第一个列表。你能帮我解决这个问题吗? 提前谢谢。
答案 0 :(得分: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.List
intercalate