Advertisement
Guest User

Untitled

a guest
Jan 7th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 0.61 KB | None | 0 0
  1. ; (transform '(A 2 B 0 C 2 D 0 E 0)) => (A (B) (C (D) (E)))
  2. (defun transform(l)
  3.   (if (null l)
  4.       nil
  5.       (tree-sequence l)))
  6.        
  7. (defun tree-sequence(l)
  8.   (case (cadr l)
  9.     (0 (values (list (car l)) (cddr l)))
  10.     (1 (multiple-value-bind (left-subtree rest-of-list) (tree-sequence (cddr l))
  11.           (values (list (car l) left-subtree) rest-of-list)))
  12.     (t (multiple-value-bind (left-subtree rest-of-list) (tree-sequence (cddr l))
  13.           (multiple-value-bind (right-subtree rest-of-rest) (tree-sequence rest-of-list)
  14.              (values (list (car l) left-subtree right-subtree) rest-of-rest))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement