1 type List<T> 2 def (==) rhs = 3 if size <> rhs.size then 4 false 5 else 6 for i = 0 until size do 7 if self[i] <> rhs[i] then return false 8 9 true 10 11 def contains x = as_slice.contains x 12 def first = self[0] 13 def last = self[size - 1] 14 15 def try_last = 16 if size == 0 17 then None 18 else Some self[size - 1] 19 20 def try_find_last (f : T -> bool) = 21 if is_empty then return None 22 23 for i = size - 1 downto 0 do 24 let x = self[i] 25 if f x then 26 return Some x 27 28 None 29 30 def find_last (f : T -> bool) = try_find_last f |> unwrap 31 32 type List<T> where T : Comparable 33 def compare (other : List<T>) : Ordering = 34 let count = size.min other.size 35 for i = 0 until count do 36 let u = self[i] 37 let v = other[i] 38 if u > v then return Ordering/Greater 39 else if u < v then return Ordering/Less 40 41 if size > other.size then Ordering/Greater 42 else if size < other.size then Ordering/Less 43 else Ordering/Equal 44 45 is Compare 46 47 type MutList<T> 48 def remove_last = 49 let last = self[size - 1] 50 remove_at (size - 1) 51 last 52 53 def add_all<U> (items : U) where U : Iterable<T> = 54 for item in items do 55 add item 56