diff options
author | Vladimir Azarov <avm@intermediate-node.net> | 2025-05-18 14:17:50 +0200 |
---|---|---|
committer | Vladimir Azarov <avm@intermediate-node.net> | 2025-05-18 14:17:50 +0200 |
commit | d289f01594024a8fe64aeed56721260fab6b4e50 (patch) | |
tree | 204b160e1fb1d3325cc493db1d84b351dfb621a6 /tree.sml | |
parent | 183a4420d2f2a985dd26d76e63c2cdcaafedc5ad (diff) |
#else, #elif (rudimentary) support
Diffstat (limited to 'tree.sml')
-rw-r--r-- | tree.sml | 20 |
1 files changed, 14 insertions, 6 deletions
@@ -1,16 +1,24 @@ structure Tree: TREE = struct datatype ('k, 'v) t = Node of 'k * 'v * ('k, 'v) t * ('k, 'v) t | Empty - exception Exists - val empty = Empty - fun insert _ Empty k v = Node (k, v, Empty, Empty) + fun insert _ Empty k v = (NONE, Node (k, v, Empty, Empty)) | insert cmp (Node (k', v', left, right)) k v = case cmp k k' of - LESS => Node (k', v', insert cmp left k v, right) - | EQUAL => raise Exists - | GREATER => Node (k', v', left, insert cmp right k v) + LESS => + let + val (res, left) = insert cmp left k v + in + (res, Node (k', v', left, right)) + end + | EQUAL => (SOME v', Node (k, v, left, right)) + | GREATER => + let + val (res, right) = insert cmp right k v + in + (res, Node (k', v', left, right)) + end fun lookup _ Empty _ = NONE | lookup cmp (Node (k', v', left, right)) k = |