我有一个定义为
的树类型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
所以我想我的问题可以简化为“如何将一个元素列表添加到列表中”。
谢谢!
答案 0 :(得分:5)
您需要@
运算符,它连接两个列表。
::
是一个consing运算符,它只能将一个元素添加到列表中,即它的左侧应该是一个元素,右侧应该是列表。
答案 1 :(得分:1)
ivg的回答是正确的。更清楚一点:
let xs = [2;3;4]
1 :: xs
返回[1;2;3;4]
,xs
的类型为int list
,1
为int
。因此,如果您使用'a list
,则::
运算符需要在其左侧添加'a
个元素。
要连接列表,请尝试
[1] @ [2;3;4]