Blob


1 (defun make-tree (entry left right)
2 (list entry left right))
3 (defun make-leaf (entry)
4 (list entry nil nil))
5 (defun entry (tree)
6 (car tree))
7 (defun set-entry! (tree ent)
8 (setf (car tree) ent))
9 (defun left-branch (tree)
10 (cadr tree))
11 (defun set-let-branch! (tree lb)
12 (setf (cadr tree) lb))
13 (defun right-branch (tree)
14 (caddr tree))
15 (defun set-right-branch! (tree lb)
16 (setf (caddr tree) lb))
18 (defun make-record (key data)
19 (list key data))
20 (defun key (record)
21 (car record))
22 (defun data (record)
23 (cadr record))
24 (defun make-table (&key (<? #'<))
25 (let ((local-table (cons '*head* nil)))
26 (labels (
27 (tree-root ()
28 (cdr local-table))
29 (set-tree-root! (node)
30 (setf (cdr local-table) node))
31 (node-lookup (key node)
32 (if (null node)
33 nil
34 (let* ((cur-entry (entry node))
35 (cur-key (key cur-entry)))
36 (cond ((funcall <? key cur-key)
37 (node-lookup
38 key
39 (left-branch node)))
40 ((funcall <? cur-key key)
41 (node-lookup
42 key
43 (right-branch node)))
44 (t
45 cur-entry))))))