将所有[]替换为{} - 尽可能短

时间:2015-06-23 10:11:59

标签: haskell

鉴于以下代码:

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}}

所以我的目标是分别用[]替换结果字符串中的每个{}

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:4)

您需要的只是爱,并将print分成putStrLn . show,然后在中间添加一个简单的map进行转换:

main :: IO ()
main = 
    let fn '[' = '{'
        fn ']' = '}'
        fn c   = c
    in (readLn :: IO [Integer]) >>= putStrLn . map fn . show . subsequences

Live demo

上面的代码,给定[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

Live demo