aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRoland McGrath <[email protected]>1991-08-18 01:37:14 +0000
committerRoland McGrath <[email protected]>1991-08-18 01:37:14 +0000
commit1e134a5fd866a40da7b2baf2a52c46ab82a08d74 (patch)
treed090c5c2a10e4ef923e2035bc9fd6be6458bf6ab /src
parent6679505fd4203a42d4f8bc6271fe3e0f855e3151 (diff)
*** empty log message ***
Diffstat (limited to 'src')
-rw-r--r--src/fns.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/fns.c b/src/fns.c
index fc9abd9ce7..d6abca525d 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.")