Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell循环消耗32GB的“数据”;简单的;输出_Haskell_Out Of Memory - Fatal编程技术网

Haskell循环消耗32GB的“数据”;简单的;输出

Haskell循环消耗32GB的“数据”;简单的;输出,haskell,out-of-memory,Haskell,Out Of Memory,我还是一个haskell新手,所以请原谅我糟糕的代码风格 我需要把盒子里各种字母的组合写进文件里。事实上,我需要所有这些线来对一个古老的谜进行暴力攻击。一行由26个字母和10个数字组成。拼图中给出的前6个字符是字母 这是我的代码: import Data.List (delete) letters = ['A'..'Z'] allChars = letters ++ ['0'..'9'] boxContents :: [Char] -> [Char] -> [[Char]] bo

我还是一个haskell新手,所以请原谅我糟糕的代码风格

我需要把盒子里各种字母的组合写进文件里。事实上,我需要所有这些线来对一个古老的谜进行暴力攻击。一行由26个字母和10个数字组成。拼图中给出的前6个字符是字母

这是我的代码:

import Data.List (delete)

letters = ['A'..'Z']
allChars = letters ++ ['0'..'9']

boxContents :: [Char] -> [Char] -> [[Char]]
boxContents l lp = [a:b:c:d:e:f:delete f(delete e(delete d(delete c (delete b (delete a lp))))) | 
                 a <- l, 
                 b <- delete a l, 
                 c <- delete b (delete a l), 
                 d <- delete c (delete b (delete a l)),
                 e <- delete d (delete c (delete b (delete a l))),
                 f <- delete e (delete d (delete c (delete b (delete a l))))
                 ]

main :: IO()                    
main = writeFile "c:\\bc.txt" $ unlines $ boxContents letters allChars
导入数据列表(删除)
字母=['A'…'Z']
allChars=字母+++['0'..'9']
boxContents::[Char]->[Char]->[[Char]]
boxContents l lp=[a:b:c:d:e:f:delete f(delete e)(delete d)(delete c)(delete b(delete a lp '))|

a您是否正在尝试生成长度为7的
所有字符的排列,其中前六个已知为
字母
?请使用
排列
,并阅读以下内容:您是否使用
-O2
编译它在ghc 7.8中没有使用
-O2
的空间爆炸。4@RobAu:字符串比7个字符长一点。大一点。西比:你是我的英雄。这是一个暗示。现在它起作用了。谢谢。有人解释过为什么在没有优化的情况下,GHCi需要这么多空间吗?为什么在上面的代码中保留这么多数据?为什么它没有被垃圾收集?使用
show.length
而不是
unlines
使它在恒定空间中运行。E即使使用
show.length.unlines
也会使其具有恒定的空间。
writeFile
中的问题是否不像人们所期望的那样懒散地编写?无论优化级别如何(正如我所期望的),它都会在恒定的空间中运行。我是唯一一个吗?