diff options
author | Vladimir Azarov <avm@intermediate-node.net> | 2025-08-01 19:26:54 +0200 |
---|---|---|
committer | Vladimir Azarov <avm@intermediate-node.net> | 2025-08-01 19:26:54 +0200 |
commit | b3f8ca28af653dcb5fdc10e8c70439d86c043635 (patch) | |
tree | 168ef8c424c4688d3ae5fdcb30ecb10d81eeca35 /tree.sml | |
parent | 0a091754ea2d9944e35215d67604c58c6f874cbd (diff) |
Remove fp support
Diffstat (limited to 'tree.sml')
-rw-r--r-- | tree.sml | 28 |
1 files changed, 16 insertions, 12 deletions
@@ -71,24 +71,25 @@ structure Tree: TREE = struct Left of 'k * 'v * ('k, 'v) t | Right of 'k * 'v * ('k, 'v) t - fun assemble n buf = + fun assemble buf n = let - fun assemble' tree (Left (k, v, right) :: tail) = - assemble' (Node (k, v, tree, right)) tail - | assemble' tree (Right (k, v, left) :: tail) = - assemble' (Node (k, v, left, tree)) tail - | assemble' tree [] = tree + fun assemble' (Left (k, v, right) :: tail) tree = + assemble' tail (Node (k, v, tree, right)) + | assemble' (Right (k, v, left) :: tail) tree = + assemble' tail (Node (k, v, left, tree)) + | assemble' [] tree = tree in - assemble' n buf + assemble' buf n end - fun lookup' _ _ Empty k f = + fun lookup' buf _ Empty k f = let val (res, newV) = f NONE in - case newV of - NONE => (res, Empty) - | SOME v => (res, Node (k, v, Empty, Empty)) + (res, assemble buf + (case newV of + NONE => Empty + | SOME v => Node (k, v, Empty, Empty))) end | lookup' buf cmp (T as Node (k', v', left, right)) k f = case cmp k k' of @@ -100,7 +101,7 @@ structure Tree: TREE = struct in case newV of NONE => (res, T) - | SOME v => (res, assemble (Node (k', v, left, right)) buf) + | SOME v => (res, assemble buf (Node (k', v, left, right))) end fun lookup2 cmp t k f = lookup' [] cmp t k f @@ -120,4 +121,7 @@ structure Tree: TREE = struct in print' 0 t end + + fun size Empty = 0 + | size (Node(_, _, l, r)) = 1 + size l + size r end |