使用
执行字符串排列后listofstrings= ["string1", "string2", "string3", "string4"]
listsWithNewLines = map (++ ["\n"]) $ permutations listofstrings
mapM_ putStr (concat listsWithNewLines)
输出非常好。 我想将输出保存到文本文件。 怎么可能有用?
答案 0 :(得分:4)
To" loop"在列表上执行monadic动作,你可以使用
foo = do
...
let action string = do
writeFile "filename" string
putStrLn ("written: " ++ string)
...
mapM_ action $ concat listsWithNewLines
或者,使用Data.Foldable
,您可以遵循此习语:
foo = do
...
for_ (concat listsWithNewLines) $ \string -> do
writeFile "filename" string
putStrLn ("written: " ++ string)
...
答案 1 :(得分:3)
一种解决方案可能是将您的最后一行更改为:
mapM_ (writeFile "filename") $ concat listsWithNewLines
writeFile
接受文件路径并将作为第二个参数传递的字符串写入其中。
<强>更新强>
您可以使用writeFile
而不是使用appendFile
(如果没有,则每次放入新单词时都会覆盖该文件):
let writeAndPrint word = appendFile "filename" word >> putStr word
mapM_ writeAndPrint $ concat listsWithNewLines
>>
是测序monadic计算的运算符。正如@chi指出的那样,你可以在Haskell文件中重写它,比如说,printAndWrite.hs
如下:
main = do
let listofstrings= ["string1", "string2", "string3", "string4"]
let listsWithNewLines = map (++ ["\n"]) $ permutations listofstrings
let writeAndPrint word = do
appendFile "filename" word
putStr word
mapM_ writeAndPrint $ concat listsWithNewLines
在此之后,您可以将其加载到GHCi
,或者使用GHC
编译程序并在控制台上执行它。如果您在GHCi
中加载,则应使用:load printAndWrite.hs
,然后运行main
。