>我有一个树类型定义为
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 list
,1
是int
。因此,如果使用 'a list
,::
运算符的左侧需要有一个'a
类型化的元素。
要连接列表,请尝试
[1] @ [2;3;4]