hel*_*mus 2 haskell matrix type-conversion
我需要一些Haskell的帮助.我想读取一个字符串并将该字符串转换为布尔值列表的列表.例如,"LLL\nbbb\nLLL"应该产生以下列表:[[True,True,True],[False,False,False],[True,True, True]].应该忽略任何其他事情.
我是函数式编程的新手.我尝试了以下方法:
StringParse :: String -> Matrix
StringParse s =
case s of
"L" -> Matrix [[True]]
"b" -> Matrix [[False]]
Run Code Online (Sandbox Code Playgroud)
使用数据类型Matrix:
data Matrix = Matrix [[Bool]]
您首先在子问题中拆分您的任务.
lines.filter.L转换为一个True值,每个b转换为一个False.那只是一个map操作.map将它们应用于行列表.Matrix数据构造函数中.在Haskell中将所有链接在一起非常容易:
parse :: String -> Matrix
parse = Matrix . map (map decide . filter isKnown) . lines
where decide 'L' = True
decide 'b' = False
isKnown 'L' = True
isKnown 'b' = True
isKnown _ = False
Run Code Online (Sandbox Code Playgroud)
那将是一个非常好的解决方案.
实际上,在这里合并第二步和第三步可能更好:不是首先选择我们可以处理的值,然后在单独的情况下处理相同的值集,我们可以同时执行这两个步骤.IMO最好的方式,虽然它现在可能让你困惑,但是使用列表是monad的事实:
parse' :: String -> Matrix
parse' = Matrix . map translate . lines
where translate line = do
ch <- line
case ch of 'L' -> [True]
'b' -> [False]
_ -> []
Run Code Online (Sandbox Code Playgroud)