Mercurial > emacs
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.