home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / xl21hos2.zip / TCONC.LSP < prev    next >
Lisp/Scheme  |  1995-12-27  |  830b  |  35 lines

  1. ;; Not part of Common Lisp, but used in XLISP internally for string streams
  2.  
  3. ;; THE CAR OF A TCONC POINTS TO THE TCONC LIST,
  4. ;; THE TAIL POINTS TO LAST ELEMENT
  5.  
  6. (defun make-tconc nil
  7.     (cons 'nil 'nil))
  8.  
  9. (defun tconc (tc new)
  10.     (let ((newl (cons new 'nil)))
  11.       (if (null (cdr tc))
  12.       (rplaca tc newl)
  13.       (rplacd (cdr tc) newl))
  14.       (rplacd tc newl)
  15.       tc))
  16.  
  17. (defun lconc (tc list)
  18.     (cond ((not (null list))
  19.        (if (null (cdr tc))
  20.            (rplaca tc list)
  21.            (rplacd (cdr tc) list))
  22.        (rplacd tc (last list))))
  23.     tc)
  24.  
  25. (defun remove-head (tc)
  26.     (cond ((null (car tc)) 'nil)
  27.       ((null (cdar tc))
  28.        (let ((element (caar tc)))
  29.          (rplaca tc 'nil)
  30.          (rplacd tc 'nil)
  31.          element))
  32.       (t (let ((element (caar tc)))
  33.            (rplaca tc (cdar tc))
  34.            element))))
  35.