尾递归ocaml函数,其输出具有从n到0的数字的列表;

问题描述 投票:0回答:2

这是函数应该做的:

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;;

任何线索?谢谢。

ocaml tail-recursion
2个回答
0
投票

嗯,@ glennsl是对的,您似乎没有在问一个特定的问题。因此,很难知道如何提供帮助。但是这里有一些评论。

您的代码根本没有定义函数。它只是基于名为n的全局变量来计算值。您应该将代码充实到一个名为to0from的函数的定义中(根据您的说法)。

n为0时,您的代码返回一个整数值0。在其他情况下,它返回一个列表。这可能不对,可能是您说无法使代码正常工作时的意思。

是否以尾部位置递归调用loop?如果是这样,我想说你的代码是尾递归的。


0
投票

我可以向您提示我该如何处理...

let to0from d =
  let rec to0from_aux s acc =
    (* add code here to build list *) in
  to0from_aux 0 []
© www.soinside.com 2019 - 2024. All rights reserved.