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 回答