gpt4 book ai didi

OCaml:如何执行使用尾递归的程序?

转载 作者:行者123 更新时间:2023-12-02 08:12:35 26 4
gpt4 key购买 nike

我正在使用尾递归编写一个函数,但我不知道如何执行。正常情况下,我使用ocaml QuicksortTail.ml Qsort,但是当我对一个包含70000个元素的列表执行时,出现错误:

Fatal error: exception Stack_overflow"

let rec trev l r = 
match l with
| [] -> r
| x::xs -> trev xs (x::r);;
let rev l = trev l [];;

List.iter (fun x->print_int x) (rev[5;4;3;2;1])

我的 oCaml 是 4.01。

最佳答案

据我所知,@RichouHunter 是正确的。

只是为了完整起见,这里是一个顶层 session ,显示您的代码工作正常:

$ rlwrap ocaml
OCaml version 4.03.0

# let rec trev l r =
match l with
| [] -> r
| x::xs -> trev xs (x::r);;
val trev : 'a list -> 'a list -> 'a list = <fun>
# let rev l = trev l [];;
val rev : 'a list -> 'a list = <fun>

# let rec range accum m n = if m > n then accum else range (n :: accum) m (n - 1);;
val range : int list -> int -> int -> int list = <fun>

# let big = range [] 1 70000;;
val big : int list =
[1; 2; 3; ...]
# let revbig = rev big;;
val revbig : int list =
[70000; 69999; 69998; ...]

正如@RichouHunter 所说,运行尾递归代码没有什么特别要做的。

关于OCaml:如何执行使用尾递归的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45066132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com