]> git.eshelyaron.com Git - emacs.git/commitdiff
(butlast, nbutlast): Moved from cl.el to here.
authorKenichi Handa <handa@m17n.org>
Thu, 28 Dec 2000 12:15:44 +0000 (12:15 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 28 Dec 2000 12:15:44 +0000 (12:15 +0000)
lisp/subr.el

index e28974811648f046c6ce851905cbaeb187a75a7f..2dc159a3424042106c3acf39bbbb5e2543160f1d 100644 (file)
@@ -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'."