1

([Char, Int])型のテーブルから文字列tab2str :: Table -> String(特定のフォーマットパターンに従う)に変換しようとしています。

私はfoldrを使用しています(タイトルが示すように)が、正確な関数を機能させるのにいくつかの問題があります-つまり、エラーです。私の関数は次のようになります。

tab2str xs = foldr (++) ' ' $ map (\char count -> show char ++ ':' ++ show count ++ '\n') xs

出力は、テーブル内の各文字、コロン、そして\n。したがって、テストは次のようになります。

tab2str test1 == "F: 1\no: 1\nl: 1\nd: 1\nr: 1\n"

どこ test1 == [(F, 1), (o, 1), (l, 1), (d, 1), (r, 1)]

ありがたいことにどんな助けも受けました。

4

1 に答える 1

1

最小限の修正の後、このタイプチェックは次のようになります。

tab2str xs = foldr (++) " " $ map (\(char, count) -> show char ++ ":" ++ show count ++ "\n") xs

–しかし、あなたが望むものを完全には生み出しません。

あなたはおそらくこれをもっと好きになるでしょう:

tab2str table = concat $ map formatRow table
    where formatRow (char, count) = [char] ++ ": " ++ show count ++ "\n"

次に、テスト例:

ghci> let test1 = [('F', 1), ('o', 1), ('l', 1), ('d', 1), ('r', 1)]
ghci> tab2str test1
"F: 1\no: 1\nl: 1\nd: 1\nr: 1\n"
ghci> putStr $ tab2str test1
F: 1
o: 1
l: 1
d: 1
r: 1
ghci>
于 2013-03-20T22:57:55.037 に答える