鉴于以下代码:
import Data.List;
main = (readLn :: IO [Integer]) >>= print . subsequences
它从标准输入中获取整数列表(例如[1,2,3]
)并输出如下内容:
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
我希望它是这样的:
{},{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3}}
所以我的目标是分别用[
和]
替换结果字符串中的每个{
和}
。
我怎样才能做到这一点?
答案 0 :(得分:4)
您需要的只是爱,并将print
分成putStrLn . show
,然后在中间添加一个简单的map
进行转换:
main :: IO ()
main =
let fn '[' = '{'
fn ']' = '}'
fn c = c
in (readLn :: IO [Integer]) >>= putStrLn . map fn . show . subsequences
上面的代码,给定[1, 2, 3]
,将输出:
{},{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3}}
如果这是代码高尔夫,那么你可以拥有( 106个字符):
f '[' = '{';f ']' = '}';f c = c;main = (readLn :: IO [Integer]) >>= putStrLn . map f . show . subsequences