拥抱排列充足的空间

时间:2018-04-22 16:53:53

标签: haskell hugs

首先,是的,我知道我应该使用ghc(但我们被迫在课程中使用拥抱)

所以我尝试生成{{1}}的所有排列,但在评估时,拥抱会抛出错误: "错误 - 垃圾收集无法回收足够的空间"

是否有任何quickfix或环形交叉口?

1 个答案:

答案 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)