评估期间堆栈溢出(循环递归?)错误

时间:2018-04-24 08:48:46

标签: ocaml

函数seq应该从init开始返回一个序列,并且每次都按步骤延伸,直到条件未被验证:

let  rec seq init step cond () = 
let r = ref init in
if cond !r 
then  Cons(step !r, seq !r step cond)
else Nil 

我试过这些(to_list(seq 1 seq 1(fun x - > x + 1)(fun x - > x< 10))并且我有 评估期间堆栈溢出(循环递归?)。

1 个答案:

答案 0 :(得分:4)

首先,你应该在没有充分理由的情况下避免使用引用。那么只需存储当前值而不是下一个值:

let rec seq current step cond () =
if cond current then 
  Cons(current, seq (step current) step cond)
else
  Nil