相关疑难解决方法(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
查看次数

避免"分享"的好方法?

假设有人将这个简单的Python代码翻译成Haskell:

def important_astrological_calculation(digits):
  # Get the first 1000000 digits of Pi!
  lucky_numbers = calculate_first_digits_of_pi(1000000)
  return digits in lucky_numbers
Run Code Online (Sandbox Code Playgroud)

Haskell版本:

importantAstrologicalCalculation digits =
  isInfixOf digits luckyNumbers
  where
    luckyNumbers = calculateFirstDigitsOfPi 1000000
Run Code Online (Sandbox Code Playgroud)

在使用Haskell版本之后,程序员惊讶地发现他的Haskell版本"泄漏"内存 - 在第一次调用他的函数之后,luckyNumbers永远不会被释放.这令人不安,因为该程序包含一些更类似的功能,并且所有这些功能所消耗的内存都非常重要.

是否有一种简单而优雅的方式使程序"忘记" luckyNumbers

haskell sharing

19
推荐指数
2
解决办法
774
查看次数

标签 统计

haskell ×2

compiler-optimization ×1

ghc ×1

sharing ×1