功能难以获得所需的输出文件类型

在学习了“学习Haskell”几章之后,我想动手做一些事情,并决定实现Sudoku求解器。我试图从此处实现B2函数:http://www.cse.chalmers .se / edu / year / 2013 / course / TDA555 / lab3.html

这是我的代码:

data Sudoku = Sudoku { getSudoku :: [[Maybe Int]] } deriving (Show, Eq)

printSudoku :: Sudoku -> IO ()
printSudoku s = do
putStrLn . unlines . map (map (maybe '.' (head . show))) $ rows s

stringToSudoku :: String -> [[Maybe Int]]
stringToSudoku [] = []
stringToSudoku s = (f x):stringToSudoku y
    where (x,y) = splitAt 9 s
        f = map (\x -> if (digitToInt x)==0 then Nothing else Just (digitToInt x))


readSudoku :: FilePath -> IO Sudoku
readSudoku path = do
    handle <- openFile path ReadMode
    contents <- hGetContents handle
    return $ Sudoku $ stringToSudoku contents

我能够获得所需的输出:

readSudoku "sudoku.txt" >>= printSudoku 
.......1.
4........
.2.......
....5.4.7
..8...3..
..1.9....
3..4..2..
.5.1.....
...8.6...

但是,我必须在readSudoku函数中将[[Maybe Int]]转换为Sudoku。应该可以在stringToSudoku函数中执行此操作,对不对?

sudoku.txt文件包含1行000000010400000000020000000000050407008000300001090000300400200050100000000806000

背风处

如果您想stringToSudoku返回Sudoku,可以执行以下操作:

stringToSudoku :: String -> Sudoku
stringToSudoku s = Sudoku $ stringToGrid s
    where stringToGrid [] = []
          stringToGrid s = let (x, y) = splitAt 9 s
                               f = map (\x -> if (digitToInt x)==0 then Nothing else Just (digitToInt x))
                           in (f x):stringToGrid y

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我的网站难以获得SSL认证

来自分类Dev

难以获得大笔股票收益的代码

来自分类Dev

Solr难以获得具有多个术语的模糊搜索

来自分类Dev

password.js难以获得哈希密码

来自分类Dev

用小数除法时难以获得正确答案

来自分类Dev

将剪切字段放置在输出文件的所需位置

来自分类Dev

难以获得测试集中测试用例的完整列表

来自分类Dev

难以获得测试集中测试用例的完整列表

来自分类Dev

难以获得游标数据并将其存储在字符串中

来自分类Dev

难以获得Realtime RecyclerView FirebaseUI android显示来自数据库的消息

来自分类Dev

碎片错误的活动,难以获得共享首选项的价值

来自分类Dev

从汇总获得所需的输出

来自分类Dev

从汇总获得所需的输出

来自分类Dev

获得所需输出的建议

来自分类Dev

将时间戳附加到功能中的输出文件

来自分类Dev

覆盖输出文件?

来自分类Dev

循环输出文件?

来自分类Dev

Webpack - 输出文件

来自分类Dev

写入输出文件

来自分类Dev

如何使用 dd 实用程序跳过输出文件中所需的字节数?

来自分类Dev

单个规则的多个文件类型输出:无法从输出文件确定输入文件中的通配符

来自分类Dev

无法从iconv获得所需的输出

来自分类Dev

确定模式以获得所需的输出

来自分类Dev

无法从iconv获得所需的输出

来自分类Dev

无法从 Radcombobox 获得所需的功能

来自分类Dev

结合sed和xargs获得源文件和输出文件名

来自分类Dev

在斯坦福大学NER中无法获得输出文件

来自分类Dev

无法获得控制台印章以登录到自定义输出文件

来自分类常见问题

让NuGet包输出文件