From 369fba5fb7725e65fd426032397fb854614a3ae9 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Wed, 27 Aug 1997 22:34:30 +0000 Subject: [PATCH] (last): Accept optional second argument. --- lisp/subr.el | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lisp/subr.el b/lisp/subr.el index 513a63a2f2..cba1ed225b 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. -- 2.20.1