首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GHC是否能够尾部调用优化IO操作?

GHC是否能够尾部调用优化IO操作?
EN

Stack Overflow用户
提问于 2009-04-27 03:22:29
回答 1查看 629关注 0票数 8

GHC是否会默认对以下函数进行尾调优?唯一奇怪的是它递归地定义了一个IO操作,但我不明白为什么这不能降低总拥有成本。

代码语言:javascript
复制
import Control.Concurrent.MVar

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-04-27 04:34:40

因为您的代码等同于

代码语言:javascript
复制
consume store (x:xs) = putMVar store >> consume store xs

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

因此,答案是GHC在默认情况下不会对此进行优化;您需要-O选项。

(使用GHC版本6.10.1进行的实验。)

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/792154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档