diff options
author | Richard M. Stallman <rms@gnu.org> | 1997-08-27 22:34:30 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1997-08-27 22:34:30 +0000 |
commit | 369fba5fb7725e65fd426032397fb854614a3ae9 (patch) | |
tree | 501e2bb11796ef833f15355e193cac1188236371 /lisp/subr.el | |
parent | 59966fb622614968b5faf8a006e2641772a628ba (diff) | |
download | emacs-369fba5fb7725e65fd426032397fb854614a3ae9.tar.gz |
(last): Accept optional second argument.
Diffstat (limited to 'lisp/subr.el')
-rw-r--r-- | lisp/subr.el | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lisp/subr.el b/lisp/subr.el index 513a63a2f21..cba1ed225ba 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -79,12 +79,20 @@ BODY should be a list of lisp expressions." "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. |