Advertisement
Guest User

Arborealis

a guest
Jun 14th, 2011
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 2.17 KB | None | 0 0
  1. ;Main is the entire tree
  2. ;The tree is ordered like so: ((parent) (node-value) (left-child) (right-child))
  3. ;The parent of the root is nill - nothing.
  4. (defparameter *main* (list (list ()) (list 0) (list ()) (list ())))
  5. ;Cnod is the current node
  6. (defparameter *cnod* *main*)
  7.  
  8. #| S1
  9.  | Following commands in this section (in order):
  10.  | *Left and right child creation commands
  11.  | *Movement commands
  12.  | **Node value return function (debug use only)
  13.  | **Node parent return function (debug use only)
  14.  |#
  15.  
  16. (defun makel ()
  17.   (setf (caaddr *cnod*) (list (copy-list *cnod*) (list 0) (list ()) (list ()))))
  18. (defun maker ()
  19.   (setf (car (cadddr *cnod*)) (list (copy-list *cnod*) (list 0) (list ()) (list ()))))
  20. (defun nodv ()
  21.   (caadr *cnod*))
  22. (defun parn ()
  23.   (car *cnod*))
  24.  
  25. #| S2
  26.  | Following commands in this section (in order):
  27.  | *Left and right movement commands
  28.  | *Incrementing and decrementing commands
  29.  | *Left and right paradox commands
  30.  |#
  31.  
  32. (defun movel ()
  33.   (setf *cnod* (caaddr *cnod*)))
  34. (defun mover ()
  35.   (setf *cnod* (car (cadddr *cnod*))))
  36. (defun incnd ()
  37.   (incf (caadr *cnod*)))
  38. (defun decnd ()
  39.   (decf (caadr *cnod*)))
  40. (defun paral ()
  41.   (setf (caaddr *cnod*) (copy-list (car *cnod*))))
  42. (defun parar ()
  43.   (setf (car (cadddr *cnod*)) (copy-list (car *cnod*))))
  44.  
  45. #| S3
  46.  | Following commands in this section (in order):
  47.  | *Left and right conditional movers
  48.  | *Left and right binary tests
  49.  | *Root return function
  50.  |#
  51.  
  52. (defun corml ()
  53.   (cond
  54.     ((null (caaddr *cnod*)) (progn (makel) (movel)))
  55.     ((= 0 (nodv)) (movel))
  56.     ((null (car (cadddr *cnod*))) (progn (maker) (mover)))
  57.     ((> 0 (nodv)) (mover))
  58.     (t (print "How did you get here?"))))
  59. (defun cormr ()
  60.   (cond
  61.     ((null (car (cadddr *cnod*))) (progn (maker) (mover)))
  62.     ((= 0 (nodv)) (mover))
  63.     ((null  (caaddr *cnod*)) (progn (makel) (movel)))
  64.     ((> 0 (nodv)) (movel))
  65.     (t (print "How did you get here?"))))
  66. (defun leftp ()
  67.   (if (null (caaddr *cnod*))
  68.     (setf (caadr *cnod*) 0)
  69.     (setf (caadr *cnod*) 1)))
  70. (defun righp ()
  71.   (if (null (car (cadddr *cnod*)))
  72.     (setf (caadr *cnod*) 0)
  73.     (setf (caadr *cnod*) 1)))
  74. (defun root ()
  75.   (defparameter *cnod* *main*))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement