2014-12-02 73 views
0

我在Haskell中编写了一个将markdown转换为HTML的程序,现在我试图编写基本函数来转换主要符号,并且似乎遇到了与我的函数有关的问题,错误代码是含糊的指出“testing.hs:15:28:解析输入‘&’错误”下面是我有:将Markdown转换为HTML符号

symbol x " "  = "" 
symbol x (y:ys) 
    | x == '&' = '&' : (symbol ys) 
    | x == '<' = '&lt;' : (symbol ys) 
    | x == '>' = '&rt;' : (symbol ys) 
    | otherwise = y : (symbol ys) 

解释任何帮助,我在做什么错,将不胜感激 感谢名单

回答

2

有些事情你应该纠正:使用String而不是Char代表&amp;。您递归调用symbol尚未完成。你缺少一些参数。

symbol :: [Char] -> [Char] -> [Char] 
symbol x " "  = "" 
symbol x (y:ys) 
    | x == "&" = "&amp;" ++ (symbol x ys) 
    | x == "<" = "&lt;" ++ (symbol x ys) 
    | x == ">" = "&rt;" ++ (symbol x ys) 
    | otherwise = y : (symbol x ys) 
2

双引号用于字符串,如“abcd”

单引号是用于字符,如'a'

这意味着在Haskell-'abcd'中绝对没有,并且编译器会抱怨。

而且,一旦你解决这个问题,我想指出,这

"&lt;" : (symbol ys) 

将创建的字符串,你可能不等于做到的名单......(++)concatinates串成字符串。

+0

感谢您指出了这一点,我总是迷路哈斯克尔其很难想象在功能上时,我的主要语言是Java和C++,其实我有++在他们前面不知道为什么我删除它 – Abstract3000 2014-12-02 07:25:41