这是我的代码:
type HoraAtendimento = (String, Int, Int)
htmlHAtendimento :: [HoraAtendimento] -> Html
htmlHAtendimento [] = toHtml ""
htmlHAtendimento ((da,hia,hfa):[]) = toHtml da +++ "feira "
+++
show hia +++ "h - " +++ show hfa +++ "h"
htmlHAtendimento ((da,hia,hfa):r) = toHtml da +++ "feira "
+++
show hia +++ "h - " +++ show hfa +++ "h, "
+++
htmlHAtendimento r
我正在寻找一种方法来使用map函数并摆脱这种递归函数。这是可能的,如果是的话,我该怎么做?
答案 0 :(得分:12)
查看map
的类型。它是(a -> b) -> [a] -> [b]
。这看起来不像你的类型,这是[a] - >湾那不是地图,这是一个折叠。
您要查看的高阶函数是foldr
。请参阅Hoogle。
像...一样的东西。
htmlHAtendimento :: [HoraAtendimento] -> Html
htmlHAtendimento [] = toHtml ""
htmlHAtendimento l = foldr1 (+++) $ intersperse ", " $ map f l
where f (da, hia, hfa) = toHtml da
+++ "feira "
+++ show hia
+++ "h - "
+++ show hfa
+++ "h"
我不知道这是否正确,但这是正确的方向。
答案 1 :(得分:2)
您希望折叠非空列表。这段代码可以解决这个问题:
type HoraAtendimento = (String, Int, Int)
htmlHAtendimento :: [HoraAtendimento] -> Html
htmlHAtendimento [] = toHtml ""
htmlHAtendimento l = foldl1 (+++) $ map convert l
where convert (da,hia,hfa) = toHtml da +++ "feira " +++
show hia +++ "h - " +++ show hfa +++ "h"