在 Haskell 中使用显示实例在给定矩阵中插入轮廓
Inserting outline in a given matrix using a show instance, in Haskell
我知道这个问题与指定为重复的问题类似,但我改变了我的方法,因此对于这个特殊情况的任何帮助将不胜感激。
我想为每个给定的矩阵创建一个显示实例,它不仅可以可视化其内容,还可以创建一个包含列的大纲。
到目前为止我的代码如下:
instance Show a => Show (Mat a) where
show = unlines . map (unwords . map ((++" |") . show)) . mrows
我得到的输出是:
1 | 2 | 3 |
4 | 5 | 6 |
我无法执行的是在矩阵上方、下方和中间插入行,看起来像以下示例:
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
第一个想到的是show
可能是放错地方了。有一个一般原则,read
应该是 show
的倒数。虽然您没有 Read
实例,但通常将漂亮打印放在单独的函数中。然而,这只是一种风格。
[删除不正确的陈述]
您希望能够通过用空格填充它们来处理不同长度的行(据我所知)。因此,您需要找到最大行长度。你可能想要像
这样的东西
where
cols = maximum $ map length rows
然后您可以使用类似
的方式生成分隔线
sepLine = '+' : concat (replicate cols "----+")
我知道这个问题与指定为重复的问题类似,但我改变了我的方法,因此对于这个特殊情况的任何帮助将不胜感激。
我想为每个给定的矩阵创建一个显示实例,它不仅可以可视化其内容,还可以创建一个包含列的大纲。
到目前为止我的代码如下:
instance Show a => Show (Mat a) where
show = unlines . map (unwords . map ((++" |") . show)) . mrows
我得到的输出是:
1 | 2 | 3 |
4 | 5 | 6 |
我无法执行的是在矩阵上方、下方和中间插入行,看起来像以下示例:
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
第一个想到的是show
可能是放错地方了。有一个一般原则,read
应该是 show
的倒数。虽然您没有 Read
实例,但通常将漂亮打印放在单独的函数中。然而,这只是一种风格。
[删除不正确的陈述]
您希望能够通过用空格填充它们来处理不同长度的行(据我所知)。因此,您需要找到最大行长度。你可能想要像
这样的东西where
cols = maximum $ map length rows
然后您可以使用类似
的方式生成分隔线 sepLine = '+' : concat (replicate cols "----+")