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).