我再一次用这段代码打破了路障......我发布了我早期的代码,这些代码之前有很大的不同,所以现在它的变化,问题也是如此!所以我有一个功能
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
现在,基本上发生了什么,我的辅助函数doubleHash x应该读取一行,如果该行以##开头,整个行上的h3标记并删除##。所以第一个后卫,我相信就是这样。所以,我认为doubleHash函数存在问题。所以这是doubleHash辅助函数
doubleHash ('#' : '#' : []) = True
doubleHash _ = False
所以使用cons,只是说##会返回true。 不确定这里有什么问题,但是当调用convertToHTML来运行doubleHash x时,它不会应用doubleHash == True的概念,所以在此行上打一个H3标签!相反,它是正确的头x并将H1标签应用于两条线... 例如:文字
- &GT; #这应该是H1标记的行
- &GT; ##这应该是H3标记的行
然而两者都被H1标签打了一刀。
答案 0 :(得分:9)
'#' : '#' : []
相当于"##"
。换句话说,您正在检查整个字符串是否等于"##"
。您可能想要检查字符串是否以 "##"
开头。在Data.List
中有方便的函数isPrefixOf
来测试它。
> isPrefixOf "##" "## a string"
True
> isPrefixOf "##" "# another string"
False
答案 1 :(得分:6)
只有当整个字符串为&#34; ##&#34;时,您的doubleHash
才会返回True。
这个会做你需要的任何事情:
doubleHash ('#' : '#' : _) = True
doubleHash _ = False