[英]Outputting a list of lists in Haskell?
我是Haskell的初学者,但我被要求创建一个数独求解器。 我一直在用它做一些稳定的进步,但它要求我做的一件事就是打印一个有趣的数独谜题表示。 Puzzle数据类型被定义为列表列表,因此[[Maybe Int]]
并且这由块值( [Maybe Int]
表示一行)组成。
功能签名是这样的:
printPuzzle :: Puzzle -> IO ()
我该如何输出? 我知道这可能是一个简单的问题而且我错过了重点,但我还没有达到我在语法方面领先的阶段。 任何帮助将非常感激!
简单漂亮的打印可以通过以下方式非常简洁地完成:
import Data.Char (intToDigit)
showRow :: [Maybe Int] -> String
showRow = map (maybe ' ' intToDigit)
showPuzzle :: [[Maybe Int]] -> [String]
showPuzzle = map showRow
printPuzzle :: [[Maybe Int]] -> IO ()
printPuzzle = mapM_ putStrLn . showPuzzle
showRow
从你的网格中获取一行并打印它 - 使用Data.Maybe
的maybe
函数,我们可以将其作为从每个Maybe Int
值的快速映射写入默认的“空格”值或表示数字的字符(使用intToDigit
)。
showPuzzle
只是将showRow
映射到外部列表。
printPuzzle
只是使用以前的纯定义来给出打印网格的不纯动作,通过putStrLn
每行的漂亮打印。
快速演示:
> printPuzzle [[Just 1, Nothing, Just 3],
[Nothing, Just 3, Just 6],
[Just 2, Just 4, Just 5]]
1 3
36
245
虽然您可以轻松修改上述代码以打印更明确的内容,例如:
1X3
X36
245
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.