Haskell——试图将一个字符串分解为一组特定字符上的字符串列表



我很难将字符串分解为字符串列表(这是一个更大问题的一部分(,我相信我很难,因为我无法完全掌握如何在Haskell中使用嵌套列表。

需要注意的是,我对这个问题的一般方法可能是错误的,我可以考虑更改Preludewords函数,但在优化它之前,我想先了解我做错了什么,这样我就可以修复我的理解。字符串为".... . -.-- .--- ..- -.. ."

当在列表中找到三个连续的空格时,我正试图分离字符串。我尝试过设置基本的递归来实现这一点,但我很难构建嵌套的子列表。我一直在兜圈子,所以任何建议都将不胜感激!

我当前的代码是

decodeMorse :: String -> [String]
decodeMorse [] = []
decodeMorse (' ':' ':' ':xs) = [] : decodeMorse xs
decodeMorse (x:xs) = [x] : decodeMorse xs

这将返回字符串列表,但格式为:[".",".",".","."," ","."," ","-",".","-","-","",".","-","-","-"," ",".",".","-"," ","-",".","."," ","."]

当我希望字符串在这三个空格上构造时。

提前感谢的任何帮助

您应该预先结束递归调用的第一项,因此:

decodeMorse :: String -> [String]
decodeMorse "" = []
decodeMorse ss = go ss
where go [] =[[]]
go (' ':' ':' ':xs) = [] : decodeMorse xs
go (x:xs) = let ~(y:ys) = go xs in(x:y): ys

这里CCD_ 4因此是第一个子列表,因此我们用CCD_。

然后产生:

Prelude> decodeMorse ".... . -.--   .--- ..- -.. ."
[".... . -.--",".--- ..- -.. ."]

然而,使用可以指定Morse语法的解析器库可能会更好,这通常更有效,因为它可以通过遍历列表一次来转换令牌序列中的字符串。

最新更新