diff options
author | Roland McGrath <roland@gnu.org> | 1991-08-18 01:37:14 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1991-08-18 01:37:14 +0000 |
commit | 1e134a5fd866a40da7b2baf2a52c46ab82a08d74 (patch) | |
tree | d090c5c2a10e4ef923e2035bc9fd6be6458bf6ab /src/fns.c | |
parent | 6679505fd4203a42d4f8bc6271fe3e0f855e3151 (diff) | |
download | emacs-1e134a5fd866a40da7b2baf2a52c46ab82a08d74.tar.gz |
*** empty log message ***
Diffstat (limited to 'src/fns.c')
-rw-r--r-- | src/fns.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/fns.c b/src/fns.c index fc9abd9ce73..d6abca525db 100644 --- a/src/fns.c +++ b/src/fns.c @@ -644,6 +644,39 @@ to be sure of changing the value of `foo'.") return list; } +DEFUN ("delq", Fdelq, Sdelq, 2, 2, 0, + "Delete by side effect any occurrences of ELT as a member of LIST.\n\ +The modified LIST is returned. Comparison is done with `equal'.\n\ +If the first member of LIST is ELT, there is no way to remove it by side effect;\n\ +therefore, write `(setq foo (delete element foo))'\n\ +to be sure of changing the value of `foo'.") + (elt, list) + register Lisp_Object elt; + Lisp_Object list; +{ + register Lisp_Object tail, prev; + register Lisp_Object tem; + + tail = list; + prev = Qnil; + while (!NULL (tail)) + { + tem = Fcar (tail); + if (Fequal (elt, tem)) + { + if (NULL (prev)) + list = Fcdr (tail); + else + Fsetcdr (prev, Fcdr (tail)); + } + else + prev = tail; + tail = Fcdr (tail); + QUIT; + } + return list; +} + DEFUN ("nreverse", Fnreverse, Snreverse, 1, 1, 0, "Reverse LIST by modifying cdr pointers.\n\ Returns the beginning of the reversed list.") |