adamc@397: datatype list t = Nil | Cons of t * list t adamc@397: adamc@823: fun length [t] (ls : list t) = adamc@501: let adamc@501: fun length' (ls : list t) (acc : int) = adamc@501: case ls of adamc@501: Nil => acc adamc@501: | Cons (_, ls') => length' ls' (acc + 1) adamc@501: in adamc@501: length' ls 0 adamc@501: end adamc@397: adamc@823: fun rev [t] (ls : list t) = adamc@501: let adamc@501: fun rev' (ls : list t) (acc : list t) = adamc@501: case ls of adamc@501: Nil => acc adamc@501: | Cons (x, ls') => rev' ls' (Cons (x, acc)) adamc@501: in adamc@501: rev' ls Nil adamc@501: end