2014-12-04 14 views
0

我再次用這個代碼碰到了障礙......我發佈了早先很不同的代碼,所以現在改變了,所以是問題!所以我有一個函數調試一些哈斯克爾函數,警衛

convertToHTML :: String -> String 
convertToHTML [] = [] --prevents calling head on empty line 
convertToHTML x 
      | doubleHash x  == True  = "<h3>" ++ drop 2 x ++ "</h3>" 
      | head x   == '#'  = "<h1>" ++ tail x ++ "</h1>" 
      | x    == "---" = "<hr/>" 
      | otherwise     = x 

現在,基本上都是正在發生的事情是,這是應該讀取一行,如果該行開頭##拍打着整個線H3標籤幫助我的功能doubleHash x和去除 ##。所以第一個後衛,我相信就是這樣。所以,我認爲doubleHash函數有問題。所以這裏是doubleHash幫助函數

doubleHash ('#' : '#' : []) = True 
doubleHash _ = False 

所以使用cons,只是說##會返回true。 不知道這裏有什麼問題,但是當convertToHTML被調用來運行doubleHash x時,它不適用doubleHash == True的概念,所以在這一行打了一個H3標記!而是去正確的頭x和H1標籤同時適用於線... 例如:文本

- >#這應該是一個H1標記線

- > ##這應該是一個H3標記的行

然而,兩者都被H1標籤打了一巴掌。

回答

6

只有當整個字符串是「##」時,您的doubleHash纔會返回True。
這一個會做任何你需要的:

doubleHash ('#' : '#' : _) = True 
doubleHash _ = False 
9

'#' : '#' : []相當於"##"。換句話說,你正在檢查整個字符串是否等於"##"。您可能想要檢查字符串是否以"##"開頭。在Data.List有便利的功能isPrefixOf這就是測試。

> isPrefixOf "##" "## a string" 
True 
> isPrefixOf "##" "# another string" 
False