这是函数应该做的:
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。在其他情况下,它返回一个列表。这可能不对,可能是您说无法使代码正常工作时的意思。
是否以尾部位置递归调用loop
?如果是这样,我想说你的代码是尾递归的。
我可以向您提示我该如何处理...
let to0from d =
let rec to0from_aux s acc =
(* add code here to build list *) in
to0from_aux 0 []