# HG changeset patch # User Richard M. Stallman # Date 872721270 0 # Node ID 17db1ee36bbbe498d07785d0caf30e2df11f10d9 # Parent 5c7badcafb2b9c70d79f955b5e91894684ada83e (last): Accept optional second argument. diff -r 5c7badcafb2b -r 17db1ee36bbb lisp/subr.el --- 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.