尾部递归ocaml函数,输出一个数字从n到0的列表;
这是函数应该做的:尾部递归ocaml函数,输出一个数字从n到0的列表;,ocaml,tail-recursion,Ocaml,Tail Recursion,这是函数应该做的: to0from 5 = [5;4;3;2;1;0] 我试着做这个,但我找不到办法。这就是我得到的: if n = 0 then 0 else let rec loop r = function | 0 -> r | _ -> loop (List.append r [n]) (n-1) in loop [] n;; 有什么线索吗?谢谢。好吧,@gle
to0from 5 = [5;4;3;2;1;0]
我试着做这个,但我找不到办法。这就是我得到的:
if n = 0 then
0
else
let rec loop r = function
| 0 -> r
| _ -> loop (List.append r [n]) (n-1)
in loop [] n;;
有什么线索吗?谢谢。好吧,@glennsl说得对,你似乎没有问一个具体的问题。所以很难知道如何帮助。但这里有一些评论 您的代码根本没有定义函数。它只是基于名为
n
的全局变量计算一个值。您应该将代码充实到名为to0from
的函数的定义中(根据您似乎在说的内容)
如果n
为0,则代码返回整数值0。在其他情况下,它返回一个列表。这不可能是对的,这可能就是你说你的代码不能正常工作的意思
对
循环的递归调用是否处于尾部位置?如果是这样,我会说你的代码是尾部递归的。我可以给你一个提示,告诉你我将如何处理这个问题
let to0from d =
let rec to0from_aux s acc =
(* add code here to build list *) in
to0from_aux 0 []
你有什么问题吗?为什么你不能让它按你想要的方式工作?堆栈溢出要求问题必须具体。看见