Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Haskell——尝试将字符串拆分为特定字符集上的字符串列表_List_Haskell - Fatal编程技术网

List Haskell——尝试将字符串拆分为特定字符集上的字符串列表

List Haskell——尝试将字符串拆分为特定字符集上的字符串列表,list,haskell,List,Haskell,我正在努力将一个字符串分解为一个字符串列表(这是一个更大问题的一部分),我相信我正在努力,因为我无法完全掌握如何使用Haskell中的嵌套列表 需要注意的是,我对这个问题的一般方法可能是错误的,我可以考虑修改Preludewords函数,但我想先了解我做错了什么,然后再优化它,这样我才能修正我的理解。字符串是“..-..-..-..” 当在列表中找到三个连续的空格时,我试图分隔字符串。我已经尝试设置基本递归来实现这一点,但我正在努力构建嵌套子列表。我一直在兜圈子,所以任何提示都将不胜感激 我现在

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

需要注意的是,我对这个问题的一般方法可能是错误的,我可以考虑修改Prelude
words
函数,但我想先了解我做错了什么,然后再优化它,这样我才能修正我的理解。字符串是
“..-..-..-..”

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

我现在的代码是

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

不过,最好使用一个解析器库,您可以在其中指定莫尔斯语法,这通常更有效,因为它可以通过遍历一次列表来转换一系列标记中的字符串。

ooh那是什么
~(y:ys)
syntax?@AdamSmith:这是一种无可辩驳的模式:如果我们打算拆分无限列表,这是必要的,因为这样我们就永远不会真正得到
(y:ys)
的结果。这意味着我们确信它将符合这种模式。消除GHC关于不完整模式的警告也是很有用的。这很有趣,很有意义,所以感谢您的回复。抱歉,没有尽快回复您,但这确实有帮助!我没有使用模块的唯一原因是因为这项工作是为了准备考试,我们不能使用模块;只是想加深我的理解
Prelude> decodeMorse ".... . -.--   .--- ..- -.. ."
[".... . -.--",".--- ..- -.. ."]