我无法在树中构建元素列表

时间:2014-12-14 16:30:50

标签: list ocaml

我有一个定义为

的树类型
type 'a tree = Nil | Node of ('a tree * 'a * 'a tree)

我需要在这棵树中构建一个元素列表。我试过(没有尾递归):

let elements t =
  let rec walk node =
    match node with
    | Nil -> []
    | Node(lChild, x, rChild) ->
      (walk lChild) :: [x] :: (walk rChild)
  in
  walk set

但是我收到类型错误:表达式(walk lChild)的类型为'a list,但表达式的类型为'a

所以我想我的问题可以简化为“如何将一个元素列表添加到列表中”。

谢谢!

2 个答案:

答案 0 :(得分:5)

您需要@运算符,它连接两个列表。

::是一个consing运算符,它只能将一个元素添加到列表中,即它的左侧应该是一个元素,右侧应该是列表。

答案 1 :(得分:1)

ivg的回答是正确的。更清楚一点:

 let xs = [2;3;4]

1 :: xs返回[1;2;3;4]xs的类型为int list1int。因此,如果您使用'a list,则::运算符需要在其左侧添加'a个元素。

要连接列表,请尝试

[1] @ [2;3;4]