3. type 'a tree = LEAF of 'a
| NODE of int * 'a tree * 'a tree
type 'a digit = ZERO
| ONE of 'a tree
type rlist = Element.t digit list
let rec consTree = function
| (t, []) -> [ONE t]
| (t, ZERO :: ts) -> ONE t :: ts
| (t1, ONE t2 :: ts) -> ZERO :: consTree (link (t1, t2), ts)
;;
let rec unconsTree = function
| [] -> raise Empty
| [ONE t] -> (t, [])
| (ONE t :: ts) -> (t, ZERO :: ts)
| (ZERO :: ts) ->
let (NODE (_, t1, t2), ts') = unconsTree ts in
(t1, ONE t2 :: ts')
;;
5. type 'a tree = LEAF of 'a
| NODE of int * 'a tree * 'a tree
type 'a digit = ONE of 'a tree
| TWO of 'a tree * 'a tree
type rlist = Elem.t digit list
let rec consTree = function
| (t, []) -> [ONE t]
| (t1, ONE t2 :: ts) -> TWO (t1, t2) :: ts
| (t1, TWO (t2, t3) :: ts) -> ONE t1 :: consTree (link (t2, t2), ts)
;;
let rec unconsTree = function
| [] -> raise Empty
| [ONE t] -> (t, [])
| (ONE t1 :: ts) ->
let (NODE (_, t2, t3), ts') = unconsTree ts in
(t1, TWO (t2, t3) :: ts')
| (TWO (t1, t2) :: ts) -> (t1, ONE t2 :: ts)
;;
6. 9.2.3 Lazy Representations
Binomial Heapsに遅延評価を導入したら、
挿入がAmortized timeでO(1)になった。
Binary Random Access List の cons 関数も
O(1) Amortized Timeで実行可能なはず。