我将 Emacs 与 一起使用agda-mode
,并编写了这个函数:
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
Nat
,succ
并且*
被定义为与 Agda 的自然数内部定义兼容。
当我评估时,(pow 2 100000)
我得到一个堆栈溢出错误。但是,鉴于递归调用是尾调用,我希望 agda 解释器优化pow'
成一个循环。
如何启用此优化?