我是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中更容易说然后完成:/
答案 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。
如果你编辑了你的问题以使它更清楚你想要的东西,那将会有很大的帮助。你想要什么输出?