changeset 19584:17db1ee36bbb

(last): Accept optional second argument.
author Richard M. Stallman <rms@gnu.org>
date Wed, 27 Aug 1997 22:34:30 +0000
parents 5c7badcafb2b
children 3d2741d4fabc
files lisp/subr.el
diffstat 1 files changed, 14 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/subr.el	Wed Aug 27 21:20:47 1997 +0000
+++ b/lisp/subr.el	Wed Aug 27 22:34:30 1997 +0000
@@ -79,12 +79,20 @@
   "Return the cdr of the cdr of X."
   (cdr (cdr x)))
 
-(defun last (x)
-  "Return the last element of the list X.
-If X is nil, return nil."
-  (while (cdr x)
-    (setq x (cdr x)))
-  x)
+(defun last (x &optional n)
+  "Return the last link of the list X.  Its car is the last element.
+If X is nil, return nil.
+If N is non-nil, return the Nth-to-last link of X.
+If N is bigger than the length of X, return X."
+  (if n
+      (let ((m 0) (p x))
+	(while (consp p)
+	  (setq m (1+ m) p (cdr p)))
+	(if (<= n 0) p
+	  (if (< n m) (nthcdr (- m n) x) x)))
+    (while (cdr x)
+      (setq x (cdr x)))
+    x))
 
 ;;;; Keymap support.