用于在不使用append的情况下取消组合序列的功能

时间:2018-05-18 16:33:57

标签: ocaml

我想写一个函数将一对夫妻分成几个序列,这里是代码:

append

由于复杂性,我想在不使用{{1}}(不是递归终端函数)的情况下这样做。

1 个答案:

答案 0 :(得分:1)

我认为您想要做的是以下内容:

let uncombine s =
  let rec aux sr =
    match sr with
    | Nil -> Nil, Nil
    | Cons ((e1, e2), sr) ->
      let s1, s2 = aux sr in
      Cons (e1, s1), Cons (e2, s2)
  in
  aux (s ())

当然你也可以写一个尾递归函数并在最后反转它。你不会有最好的表现,但你不会冒着堆叠溢出的风险。