(defmacro while (a &rest b) `(do () ((not ,a)) . ,b)) (defun copyr (l) (cond ((null l) nil) (t (cons (car l) (copyr (cdr l)))))) (defun copyi0 (l) (let ((result-head (list (car l)))) (do ((l (cdr l) (cdr l)) (result result-head (rplacd result (cons (car l) nil)))) ((null l) result-head)))) (defun copyi2 (l) (let* ((l l) (result-head (list (car l))) (result result-head)) (while (setq l (cdr l)) (setq result (rplacd result (cons (car l) nil)))) result-head)) (defun copyi4 (l) (mapcar '(lambda(x)x) l)) (defun copyi3 (l) (do((l l (cdr l)) (result nil (cons (car l) result))) ((null l) (nreverse result)))) (defun copyib (l) (if l (let* ((result (list (car l)))) (prog1 result (while (setq l (cdr l)) (setq result (rplacd result (cons (car l) nil)))))) )))))