MoonBit 语言导览 MoonBit

不可变列表

不可变列表位于包 @immut/list 中。

它可以是:

  • Nil : 一个空列表
  • Cons : 一个元素和列表的其余部分。

因此,许多操作(例如反转列表)的复杂度为 O(n),并且可能会栈溢出。

fn count[A](list : @immut/list.T[A]) -> UInt {
  match list {
    Nil => 0
    Cons(_, rest) => count(rest) + 1 // may overflow
  }
}

///|
fn main {
  let empty_list : @immut/list.T[Int] = Nil
  let list_1 = @immut/list.Cons(1, empty_list)
  let list_2 = @immut/list.Cons(2, list_1)
  let list_3 = @immut/list.Cons(3, empty_list)
  let reversed_1 = list_1.rev()
  let n = count(reversed_1)
}