使用Haskell将单词转换为某些字符串

时间:2014-12-05 06:33:37

标签: html haskell input output

我想逐行读取一个String。然后把它放回一个字符串

 unlines.map function.lines

现在我想转换Line中的任何单词。

这个*是我要转换的句子的一个例子。

"是一个例子"被*包围,所以这个String将使用emphasis标签转换为斜体。我该怎么写这个代码?代码已经逐行读取字符串。所以现在我想在符合条件的情况下在Line中转换一个String。

由于

1 个答案:

答案 0 :(得分:1)

Markdown很难。特别是,似乎语法在某些地方是模棱两可的。请考虑以下事项:

  

第一个计算是2 * 5,第二个计算是3 * 7,所以要处理它。

中间的文字是否应以粗体显示?可能不是用户的意图,但如果您解释规范字面 ...


有原因吗

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

而不仅仅是

convertToHTML :: String -> String
convertToHTML cs0 =
  case cs0 of
    ('#':'#':cs) -> "<h2>" ++ cs ++ "</h2>" -- Swapped now.
    (    '#':cs) -> "<h1>" ++ cs ++ "</h1>"
    "---"        -> "<hr/>"
    _            -> cs0

哪个不需要任何辅助功能? (并且不需要head。)


您的实际问题是什么?如何处理明星加粗?这样的事情怎么样?

not_bold :: String -> String
not_bold ('*':cs) -> "<b>" ++ bold cs
not_bold (  c:cs) -> c : not_bold cs
not_bold (    []) -> []

bold :: String -> String
bold ('*':cs) -> "</b>" ++ not_bold cs
bold (  c:cs) -> c : bold cs
bold (    []) -> error "unterminated bold section"