【发布时间】:2010-12-03 13:34:13
【问题描述】:
在chapter about function in the Oz tutorial 中,它说:
类似于惰性函数式语言 Oz 允许某些形式的 尾递归优化是 在某些严格的函数中找不到 包括标准 ML 在内的语言, 方案和并发功能 语言二郎。然而,标准 Oz 中的函数定义不是 懒惰。
接着在Oz中显示以下尾递归函数:
fun {Map Xs F}
case Xs
of nil then nil
[] X|Xr then {F X}|{Map Xr F}
end
end
它的作用是,它将空列表映射到空列表和非空列表,将函数 F 应用到其头部,然后将其添加到调用 Map 的结果之前尾巴。在其他语言中,这不是尾递归,因为最后一个操作是前置操作,而不是对 Map 的递归调用。
所以我的问题是:如果“Oz 中的标准函数定义不是惰性的”,那么 Oz 会做什么,像 Scheme 或 Erlang 这样的语言不能(或不会?)能够执行尾递归优化这个功能? Oz 中的尾递归函数究竟是什么时候?
【问题讨论】:
标签: functional-programming recursion oz