Haskell 将所有[]替换为{}-尽可能短
鉴于以下代码:Haskell 将所有[]替换为{}-尽可能短,haskell,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} 因此,我的目标是将结果字符串中的每个[和]分别替换为{和} 我怎
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}
因此,我的目标是将结果字符串中的每个[
和]
分别替换为{
和}
我怎样才能做到这一点呢?你所需要的就是爱和把
打印成计算机。显示
,然后添加一个简单的地图
,在地图之间进行转换:
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个字符):
你所需要的就是爱和把
打印成计算机。显示
,然后添加一个简单的地图
,在地图之间进行转换:
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个字符):
你发布的代码与你所问的问题有什么关系?我试图学习haskell,我发现最好的方法是看别人如何解决问题。但你似乎要问的问题与IO无关,也与后续问题无关。那么,您发布的代码片段有什么意义呢?如果您还不能发布任何有用的代码尝试,请通过发布一些示例输入和输出来准确描述问题。@leftaroundabout。。。好吧,这是一种代码高尔夫(见这里的讨论:)-这是OP最不需要的东西;)@左撇子我已经把这个问题编辑好了,这样你就可以明白我的意思了。你发布的代码与你要问的问题有什么关系?我正在努力学习haskell,我发现最好的方法就是看看别人是如何解决问题的。但是你似乎要问的问题与IO无关,也与子序列无关。那么,您发布的代码片段有什么意义呢?如果您还不能发布任何有用的代码尝试,请通过发布一些示例输入和输出来准确描述问题。@leftaroundabout。。。好吧,这是一种代码高尔夫(见这里的讨论:)-这是OP最不需要的东西;)@左撇子我已经把这个问题改了,这样你就能明白我的意思了。有没有办法把它改短一点?我有点困惑,现在如何包括阅读标准文本?@Cosaqueee请看编辑。这是最好的答案!我希望它能短一些,但仍然是超级棒,谢谢你@Cosaqueee更短,如“键入的字符更少”或“行更短”?我认为如果你去掉签名,只需将
fn
移到main
(可能???)之外,它甚至更短。有没有办法让它更短?我有点困惑,现在如何包括阅读标准文本?@Cosaqueee请看编辑。这是最好的答案!我希望它能短一些,但仍然是超级棒,谢谢你@Cosaqueee更短,如“键入的字符更少”或“行更短”?我认为,如果你去掉签名,只需将fn
移到main
之外,它甚至更短(可能??)