浏览代码

code for second exercise re: trees as mappings of keys to values

john melesky 8 年之前
父节点
当前提交
781569fa44
共有 1 个文件被更改,包括 25 次插入0 次删除
  1. 25 0
      chapter1/exercises2.sml

+ 25 - 0
chapter1/exercises2.sml

@@ -0,0 +1,25 @@
+type key = string
+
+datatype 'a tree = LEAF | TREE of 'a tree * (key * 'a) * 'a tree
+
+val empty = LEAF
+
+
+fun insert (LEAF, key, newval) = TREE(LEAF, (key, newval), LEAF)
+  | insert (TREE(l,(k,v),r), key, newval) =
+      if key < k
+        then TREE(insert(l,key,newval),(k,v),r)
+      else if key > k
+        then TREE(l,(k,v),insert(r,key,newval))
+      else TREE(l,(key,newval),r)
+
+(* This is not exhaustive, and will fail if the tree 
+   was not created using `insert` *)
+fun lookup (TREE(l,(k,v),r), key) =
+  if key = k
+  then v
+  else if key < k
+  then lookup (l, key)
+  else lookup (r, key)
+  | lookup (LEAF, key) = raise Subscript
+