尾部递归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 []

你有什么问题吗?为什么你不能让它按你想要的方式工作?堆栈溢出要求问题必须具体。看见