Mercurial > emacs
comparison lisp/subr.el @ 45690:9d351e5869c8
(copy-list): Moved here from cl.el.
(copy-tree): Renamed here from `cl-copy-tree' in cl.el.
author | Colin Walters <walters@gnu.org> |
---|---|
date | Sat, 08 Jun 2002 20:48:15 +0000 |
parents | 02df8e2ff88b |
children | 4e576724db9f |
comparison
equal
deleted
inserted
replaced
45689:01fbc1331841 | 45690:9d351e5869c8 |
---|---|
188 "Return a copy of LIST with all occurences of ELT removed. | 188 "Return a copy of LIST with all occurences of ELT removed. |
189 The comparison is done with `eq'." | 189 The comparison is done with `eq'." |
190 (if (memq elt list) | 190 (if (memq elt list) |
191 (delq elt (copy-sequence list)) | 191 (delq elt (copy-sequence list)) |
192 list)) | 192 list)) |
193 | |
194 (defun copy-list (list) | |
195 "Return a copy of a list, which may be a dotted list. | |
196 The elements of the list are not copied, just the list structure itself." | |
197 (if (consp list) | |
198 (let ((res nil)) | |
199 (while (consp list) (push (pop list) res)) | |
200 (prog1 (nreverse res) (setcdr res list))) | |
201 (car list))) | |
202 | |
203 (defun copy-tree (tree &optional vecp) | |
204 "Make a copy of TREE. | |
205 If TREE is a cons cell, this recursively copies both its car and its cdr. | |
206 Contrast to copy-sequence, which copies only along the cdrs. With second | |
207 argument VECP, this copies vectors as well as conses." | |
208 (if (consp tree) | |
209 (let ((p (setq tree (copy-list tree)))) | |
210 (while (consp p) | |
211 (if (or (consp (car p)) (and vecp (vectorp (car p)))) | |
212 (setcar p (copy-tree (car p) vecp))) | |
213 (or (listp (cdr p)) (setcdr p (copy-tree (cdr p) vecp))) | |
214 (cl-pop p))) | |
215 (if (and vecp (vectorp tree)) | |
216 (let ((i (length (setq tree (copy-sequence tree))))) | |
217 (while (>= (setq i (1- i)) 0) | |
218 (aset tree i (copy-tree (aref tree i) vecp)))))) | |
219 tree) | |
193 | 220 |
194 (defun assoc-default (key alist &optional test default) | 221 (defun assoc-default (key alist &optional test default) |
195 "Find object KEY in a pseudo-alist ALIST. | 222 "Find object KEY in a pseudo-alist ALIST. |
196 ALIST is a list of conses or objects. Each element (or the element's car, | 223 ALIST is a list of conses or objects. Each element (or the element's car, |
197 if it is a cons) is compared with KEY by evaluating (TEST (car elt) KEY). | 224 if it is a cons) is compared with KEY by evaluating (TEST (car elt) KEY). |