2013-10-07 136 views
1

我对榆树(榆树服务器0.9.2)很新颖,我遇到了一个问题,对我来说已经成为一个障碍。字符模式匹配

这里是我的问题:

根据version-0.9文件,我应该能够编写:

stripCommas str = 
    case str of 
    ',' :: rest -> stripCommas rest 
    c :: rest -> c :: stripCommas rest 

因此,为了测试这个我基本上做了我自己的函数(非常相似:)):

stripNewLine str = 
    case str of 
    '\n' :: rest -> stripNewLine rest 
    c :: rest -> c :: stripNewLine rest 

但他们的展台失败,一些调试后,我发现这个在JavaScript:

var stripNewLine = function(str){ 
    return function(){ 
     switch (str.ctor) { 
     case '::': 
      switch (str._0) { 
      case Chr '\n': 
       return stripNewLine(str._1); 
      } 
      return _L.Cons(str._0,stripNewLine(str._1)); 
     }_E.Case($moduleName,'between lines 22 and 33')}();}; 

我对JavaScript没有太多了解,但似乎Chr'\ n'应该是Chr('\ n'),强硬我可能是错的......有人能指出我正确的方向吗?我输了...

回答

3

这是一个榆树错误 - 自从最新的稳定版本已经修复 - 你说得对,它是关于错误生成的Javascript。

此外,您从该公告博客文章复制的示例代码中存在逻辑问题,即它正在进行非穷举模式匹配。

字符串是字符的列表(即String只是一个[Char]),所以适当的模式匹配应该处理空单的情况下,即:

stripCommas str = 
    case str of 
    []   -> str 
    ',' :: rest -> stripCommas rest 
    c :: rest -> c :: stripCommas rest 

main = asText <| stripCommas "1,2,3,4,5" 

您可以测试这个here(选择“主/ HEAD “来自版本选项,这是比具有JS代bug的当前版本更新的版本)。