gpt4 book ai didi

haskell - GHC 能够尾部调用优化 IO 操作吗?

转载 作者:行者123 更新时间:2023-12-02 09:31:20 26 4
gpt4 key购买 nike

GHC 会默认对以下函数执行尾调用优化吗?唯一奇怪的事情是它递归地定义 IO 操作,但我不明白为什么这不能实现 TCO。

import Control.Concurrent.MVar

consume :: MVar a -> [a] -> IO ()
consume _ [] = return ()
consume store (x:xs) = do putMVar store x
consume store xs

最佳答案

因为您的代码相当于

consume store (x:xs) = putMVar store >> consume store xs

该调用实际上并不发生在尾部位置。但是,如果您运行 ghc -O 并打开优化器,则 -ddump-simpl 选项将向您显示 GHC 中间代码的输出,并且它确实会优化为尾递归函数,它将编译成循环。

所以答案是 GHC 默认不会对此进行优化;您需要 -O 选项。

(使用 GHC 版本 6.10.1 完成的实验。)

关于haskell - GHC 能够尾部调用优化 IO 操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/792154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com