7

これは私のコードです:

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関数を使用して、この再帰関数を取り除く方法を探しています。それは可能ですか?もしそうなら、どうすればいいですか?

4

2 に答える 2

12

の型を見てくださいmap。です(a -> b) -> [a] -> [b]。それは [a] -> b であるあなたのタイプのようには見えません。それは地図ではなく、折り目です。

見たい高階関数は ですfoldrホーグルを参照してください。

何かのようなもの...

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"

それが正しいかどうかはわかりませんが、それは正しい方向です。

于 2008-12-18T03:48:09.633 に答える
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"
于 2008-12-18T03:55:07.933 に答える