summaryrefslogtreecommitdiff
path: root/tree.sml
diff options
context:
space:
mode:
authorVladimir Azarov <avm@intermediate-node.net>2025-08-04 22:13:17 +0200
committerVladimir Azarov <avm@intermediate-node.net>2025-08-04 22:13:17 +0200
commita4c60603f61dd1a9f0ce420be9067965586dd694 (patch)
treec5f48221a8291b817d6eec0fd3f70eeb8c26a300 /tree.sml
parent396ebf0c76153e5e1e9dc77371bdd02b4d3d85d1 (diff)
Object assembly
Diffstat (limited to 'tree.sml')
-rw-r--r--tree.sml20
1 files changed, 20 insertions, 0 deletions
diff --git a/tree.sml b/tree.sml
index ee82485..7209690 100644
--- a/tree.sml
+++ b/tree.sml
@@ -126,6 +126,26 @@ structure Tree: TREE = struct
print' 0 t
end
+ fun traverse Empty _ acc = acc
+ | traverse (Node (k, v, left, right)) f acc =
+ let
+ val acc = traverse left f acc
+ val acc = f k v acc
+ val acc = traverse right f acc
+ in
+ acc
+ end
+
+ fun changeV Empty _ = Empty
+ | changeV (Node (k, v, left, right)) f =
+ let
+ val left = changeV left f
+ val right = changeV right f
+ val v = f v
+ in
+ Node (k, v, left, right)
+ end
+
fun size Empty = 0
| size (Node(_, _, l, r)) = 1 + size l + size r
end