Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun make-tree (depth)
- (make-array (- (expt 2 depth) 1)))
- (defun root (tree)
- (cons 0 tree))
- (defun index-of-level (l) (- (expt 2 l) 1))
- (defun width-of-level (l) (expt 2 l))
- (defun level-of-node (n) (truncate (log (+ n 1) 2)))
- (defun offset-of-node (n) (- n (index-of-level (level-of-node n))))
- (defun print-examples ()
- (loop for n below 32 do (format t "~3D ~3D ~3D ~3D ~3D~%"
- n
- (offset-of-node n)
- (level-of-node n)
- (index-of-level (level-of-node n))
- (width-of-level (level-of-node n)))))
- (defun (setf data) (new-data node) (setf (aref (cdr node) (car node)) new-data))
- (defun data (node) (aref (cdr node) (car node)))
- (defun child (node child) (+ child (* 2 (offset-of-node node)) (index-of-level (+ 1 (level-of-node node)))))
- (defun left (node) (cons (child (car node) 0) (cdr node)))
- (defun right (node) (cons (child (car node) 1) (cdr node)))
- (let* ((tree (make-tree 3))
- (root (root tree)))
- (setf (data (left (left root))) 0
- (data (left root)) 1
- (data (right (left root))) 2
- (data root) 3
- (data (left (right root))) 4
- (data (right root)) 5
- (data (right (right root))) 6)
- tree)
- --> #(3 1 5 0 2 4 6)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement