相关疑难解决方法(0)

如何在Haskell中使CAF不是CAF?

如何将常量适用表格制作成一个不变的适用表格,以阻止它在程序的整个生命周期中保留?

我尝试过这种方法:

-- | Dummy parameter to avoid creating a CAF
twoTrues :: () -> [[[Bool]]]
twoTrues _ = map (++ (True : repeat False)) . trueBlock <$> [1..]
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用 - 配置文件显示它仍然保留,仍然将其标记为CAF.

我发现了一个相关的Google结果,Simon Peyton-Jones对Neil Mitchell 的回复,他正好问了这个问题 - 但不幸的是,答案指的是一个死链接.

haskell ghc compiler-optimization

27
推荐指数
4
解决办法
2287
查看次数

什么是超级组合器和不断的应用形式?

我正在为Super Combinators所做的努力:

超级组合器是常量或组合器,其仅包含超级组合器作为子表达式.

还有Constant Applicative Forms是什么:

任何不是lambda抽象的超级组合子.这包括真正的常量表达式,如12,((+)1 2),[1,2,3]以及部分应用的函数,如((+)4).请注意,最后一个示例在eta抽象下等效于\ x - >(+)4 x,它不是CAF.

这对我没有任何意义!是不是((+) 4)像12一样"真正不变"?CAF听起来像是我简单心灵的价值观.

haskell functional-programming combinators

22
推荐指数
1
解决办法
1320
查看次数

为什么这里的早期条款不是垃圾收集?

如果我将Kolakoski序列定义为

kolakoski :: () -> [Int]
kolakoski () = 1 : 2 : helper ()
  where
    helper () = 2 : concat (zipWith replicate (helper ()) (cycle [1, 2]))
Run Code Online (Sandbox Code Playgroud)

找到500,000,000个词

kolakoski () !! 500000000
Run Code Online (Sandbox Code Playgroud)

我发现当使用ghc -O编译时,这会很快消耗大量内存.但是,如果关闭优化,它几乎不会使用任何东西.哪种优化导致了这种情况,如何将其关闭?

memory garbage-collection haskell ghc compiler-optimization

7
推荐指数
1
解决办法
145
查看次数