(setq data (cdr data)))
alist)
+(defun copy-alist (alist)
+ (let ((new-alist ()))
+ (while alist
+ (push (cons (caar alist) (cdar alist)) new-alist)
+ (setq alist (cdr alist)))
+ (reverse new-alist)))
+
(define-setf-expander car (x)
(let ((cons (gensym))
cdaadr cdadar cdaddr cddaar cddadr cdddar cddddr caar cadddr caddr
cadr car car case catch cdar cdddr cddr cdr cdr char
char-code char= code-char cond cons consp constantly
- copy-list copy-tree decf declaim declare defconstant define-setf-expander
- define-symbol-macro defmacro defparameter defun defvar
- digit-char digit-char-p disassemble do do* documentation
+ copy-alist copy-list copy-tree decf declaim declare defconstant
+ define-setf-expander define-symbol-macro defmacro defparameter defun
+ defvar digit-char digit-char-p disassemble do do* documentation
dolist dotimes ecase eighth eq eql equal error eval every export expt
fdefinition fifth find-package find-symbol first flet format fourth
fset funcall function functionp gensym get-internal-real-time
(test (equal '((1 . 2) (a . b))
(pairlis '(1) '(2) '((a . b)))))
+; COPY-ALIST
+(let* ((alist '((1 . 2) (3 . 4)))
+ (copy (copy-alist alist)))
+ (test (not (eql alist copy)))
+ (test (not (eql (car alist) (car copy))))
+ (test (equal alist copy)))
+
; SUBST
; Can't really test this until EQUAL works properly on lists