2013-10-07 178 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的當前版本更新的版本)。