打印列表时OCaml Stackoverflow错误

时间:2018-02-28 22:20:16

标签: list printing ocaml

我正在尝试在OCaml中打印一个列表。我的列表由我定义的名为Elem的结构元素组成。在某个地方,我收到了堆栈溢出错误,我无法弄明白。

let rec pretty_print tr =
    let rec trc_list_to_str trc out = match trc with
      | [] -> out
      | t::ts -> trc_list_to_str ts (out ^ pretty_print t)
    in "[" ^ pretty_print tr ^ "]"

  and print_single_trace (st: Ast.Elem.t) =
    PrettyPrinting.print_identifier st.label ^
    PrettyPrinting.print_literal st.payload

1 个答案:

答案 0 :(得分:0)

在您当前的代码中,trc_list_to_str函数未使用,因此pretty_print_trace函数可以读作

let rec pretty_print_trace tr =
  in "<Trace>\n" ^ pretty_print_trace tr ^ "\n</Trace>\n"

因此,pretty_print_trace函数无限地调用自己,而不会查看其尝试计算的参数 <Trace><Trace><Trace><Trace> … × ∞ </Trace></Trace></Trace></Trace>