summaryrefslogtreecommitdiff
path: root/lisp/subr.el
diff options
context:
space:
mode:
authorKenichi Handa <handa@m17n.org>2000-12-28 12:15:44 +0000
committerKenichi Handa <handa@m17n.org>2000-12-28 12:15:44 +0000
commit1c1c65de36652e5ea0dcec9f7b37d0dc7eeb035c (patch)
tree688c76c8c07ca4e54f51a610ae52678b970bd4c6 /lisp/subr.el
parenta816f1c545b1760064ace7c63df551d502de37d8 (diff)
downloademacs-1c1c65de36652e5ea0dcec9f7b37d0dc7eeb035c.tar.gz
(butlast, nbutlast): Moved from cl.el to here.
Diffstat (limited to 'lisp/subr.el')
-rw-r--r--lisp/subr.el14
1 files changed, 14 insertions, 0 deletions
diff --git a/lisp/subr.el b/lisp/subr.el
index e2897481164..2dc159a3424 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -135,6 +135,20 @@ If N is bigger than the length of X, return X."
(setq x (cdr x)))
x))
+(defun butlast (x &optional n)
+ "Returns a copy of LIST with the last N elements removed."
+ (if (and n (<= n 0)) x
+ (nbutlast (copy-sequence x) n)))
+
+(defun nbutlast (x &optional n)
+ "Modifies LIST to remove the last N elements."
+ (let ((m (length x)))
+ (or n (setq n 1))
+ (and (< n m)
+ (progn
+ (if (> n 0) (setcdr (nthcdr (- (1- m) n) x) nil))
+ x))))
+
(defun remove (elt seq)
"Return a copy of SEQ with all occurences of ELT removed.
SEQ must be a list, vector, or string. The comparison is done with `equal'."