当前位置:  开发笔记 > 前端 > 正文

是否可以将此递归haskell函数转换为地图调用?

如何解决《是否可以将此递归haskell函数转换为地图调用?》经验,为你挑选了1个好方法。

这是我的代码:

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函数并摆脱这种递归函数.这是可能的,如果是的话,我该怎么做?



1> Apocalisp..:

看看的类型map.是的(a -> b) -> [a] -> [b].这看起来不像你的类型,这是[a] - > b.那不是地图,这是一个折叠.

您要查看的高阶函数是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"

我不知道这是否正确,但这是正确的方向.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有