COPY-ALIST
authorOwen Rodley <Strigoides@gmail.com>
Sat, 4 May 2013 06:14:08 +0000 (18:14 +1200)
committerOwen Rodley <Strigoides@gmail.com>
Sat, 4 May 2013 06:14:08 +0000 (18:14 +1200)
src/list.lisp
src/toplevel.lisp
tests/list.lisp

index b353700..32d0398 100644 (file)
     (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))
index b238135..f56e92e 100644 (file)
@@ -55,9 +55,9 @@
           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
index 4be2453..be6faff 100644 (file)
 (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