【发布时间】:2012-11-21 21:54:53
【问题描述】:
如何在 ML 中返回递归函数?
据我所知,不能返回递归匿名函数,只能返回匿名函数 可以作为返回值(如果返回值是函数...)。
【问题讨论】:
-
你能改写问题或举个例子吗?为什么你认为你不能返回一个递归函数?
如何在 ML 中返回递归函数?
据我所知,不能返回递归匿名函数,只能返回匿名函数 可以作为返回值(如果返回值是函数...)。
【问题讨论】:
这会是你想知道的那种例子吗?
fun f n =
let
fun g k =
if k = n then [] else k :: g (k-1)
in
g
end
您只能通过命名来进行递归定义,但这不是问题,因为您可以在任何地方编写let 表达式。
更新更具体地回答评论:
fun f g =
let
fun h 0 = g 0
| h i = h (i-1) + g i
in
h
end
(更有效的实现将使h尾递归。)
【讨论】: