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



>我有一个树类型定义为

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

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

谢谢!

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

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

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

 let xs = [2;3;4]

1 :: xs返回[1;2;3;4]xs的类型是int list1int。因此,如果使用 'a list::运算符的左侧需要有一个'a类型化的元素。

要连接列表,请尝试

[1] @ [2;3;4]

最新更新