首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Agda中启用尾叫优化

在Agda中启用尾叫优化
EN

Stack Overflow用户
提问于 2013-09-21 16:16:03
回答 1查看 183关注 0票数 2

我在agda-mode中使用Emacs,并编写了以下函数:

代码语言:javascript
复制
pow : Nat → Nat → Nat
pow m n = pow' 1 m n
          where
            pow' : Nat → Nat → Nat → Nat
            pow' acc _ zero = acc
            pow' acc m (succ n) = pow' (m * acc) m n

Natsucc*被定义为与Agda关于自然数的内部定义相兼容。

在计算(pow 2 100000)时,会得到堆栈溢出错误。但是,考虑到递归调用是尾调用,我希望agda解释器将pow'优化为一个循环。

如何启用此优化?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-27 16:24:44

这种优化没有在目前版本的Agda中实现。替代方法包括增加堆栈的大小,或将递归改写为指数中的对数,而不是线性。

我还被告知:

正在进行的工作是深入改变Agda.TypeChecking.Reduce模块(除其他外),希望这将对对内置自然的递归产生积极的影响。

关于问题跟踪器的票证

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

https://stackoverflow.com/questions/18934815

复制
相关文章

相似问题

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