【问题标题】:I can't build a list of elements in a tree我无法在树中构建元素列表
【发布时间】:2014-12-16 07:52:04
【问题描述】:

我有一个树类型定义为

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 类型

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

谢谢!

【问题讨论】:

    标签: list ocaml


    【解决方案1】:

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

    ::是一个consing操作符,它只能在列表前添加一个元素,即左边应该是一个元素,右边应该是列表。

    【讨论】:

      【解决方案2】:

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

       let xs = [2;3;4]
      

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

      要连接列表,请尝试

      [1] @ [2;3;4]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        相关资源
        最近更新 更多