首先,是的,我知道我应该使用ghc(但我们被迫在课程中使用拥抱)
所以我尝试生成{{1}}的所有排列,但在评估时,拥抱会抛出错误: "错误 - 垃圾收集无法回收足够的空间"
是否有任何quickfix或环形交叉口?
答案 0 :(得分:3)
问题可能不是因为Hugs,而是因为您的排列函数是以防止垃圾收集的方式编写的,或者只是以其他方式分配过多的内存。
以下定义的定义适用于GHC和Hugs中的[1..9]
(尽管Hugs中的permutations [1..9]
要求在我的计算机上将垃圾收集器调用58次)
permutations :: [a] -> [[a]]
permutations [] = [[]]
permutations (x:xs) = concatMap insertEverywhere (permutations xs)
where insertEverywhere [] = [[x]]
insertEverywhere (y:ys) = (x:y:ys): (map (y:) $ insertEverywhere ys)