如何让我的字符串重复x次?

时间:2012-09-06 17:46:23

标签: haskell

我是Haskell的一个完整的菜鸟我不能让我的代码工作,我不知道如何解决它!我需要帮助:)如果有人知道我需要查看哪些内容以便解决我的问题,那么我会非常感谢想法并在正确的方向上轻推。

我正在尝试创建一种C#string.Format,它会重复直到列表完成。该列表由userinput创建,然后我只想重复一个字符串,直到列表完成。

    test :: Integer -> String
    let list_n [0..k]
    test k = putStrLn (r * r) | r <- list_n   --My idea here is that i am forcing 
    --the entire list onto r and making it repeated as long as there is more in the
    --list, But im not even sure that is possible :(

任何人都有更好的想法如何做到这一点?我希望所有结果都在一行而不是一行,因此我试图创建ittereration但在HaskeLL中更容易说然后完成:/

3 个答案:

答案 0 :(得分:4)

这是两个提案;一个尝试匹配您发布的代码,另一个尝试匹配您发布的英语。这似乎主要是关于语法的问题,所以我不确定除了“阅读教程”之外还有很多有意义的解释。

-- match the code
test :: Int -> String
test k = concat [show (r * r) | r <- [0..k]]

-- match the English
test :: Int -> String -> String
test k s = concat [s | r <- [0..k]]

答案 1 :(得分:3)

这是更接近命令式风格的东西:

import Control.Monad (forM_)

test :: Int -> IO ()
test n = forM_ [0..n] (\i -> putStrLn $ show $ i*i)

这大致翻译为:“对于[0..n]中的每个i,做......”

答案 2 :(得分:3)

也许你的意思是打印一个给定的字符串n次,你似乎想要用每个字符串开始一个换行符,你似乎想要使用列表解析,这将是

test :: Integer -> String -> IO ()
test n xs = sequence_ [putStrLn xs| i<- [1..n]]

但是你要扔掉你计算的整数i。你最好做什么

test n xs = replicateM_ n (putStrLn xs)

给出了

Main> test 3 "Hello"
Hello
Hello
Hello

也许你的意思是将数字本身显示为字符串,这将是

test n = sequence_ [putStrLn (show i)| i<- [1..n]]

但同样,做得更好

test n = mapM_ putStrLn (map show [1..n])

这两个给出

Main> test 3
1
2
3

但主要是,您需要做的是首先遵循一个好的介绍性文本。我建议Learn You a Haskell for Great Good

如果你编辑了你的问题以使它更清楚你想要的东西,那将会有很大的帮助。你想要什么输出?