Mercurial > emacs
changeset 110964:388aaaced495
* lisp/subr.el (last): Make it faster.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Tue, 12 Oct 2010 20:30:36 -0700 |
parents | 8e3439ed2228 |
children | 8c6b3fc2a999 |
files | lisp/ChangeLog lisp/subr.el |
diffstat | 2 files changed, 9 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Tue Oct 12 20:23:47 2010 -0700 +++ b/lisp/ChangeLog Tue Oct 12 20:30:36 2010 -0700 @@ -1,3 +1,7 @@ +2010-10-13 IRIE Shinsuke <irieshinsuke@yahoo.co.jp> (tiny change) + + * subr.el (last): Make it faster. (Bug#7174) + 2010-10-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> (tiny change) * Makefile.in (compile-clean): Use `` instead of $(). (Bug#7178)
--- a/lisp/subr.el Tue Oct 12 20:23:47 2010 -0700 +++ b/lisp/subr.el Tue Oct 12 20:30:36 2010 -0700 @@ -289,14 +289,11 @@ If N is non-nil, return the Nth-to-last link of LIST. If N is bigger than the length of LIST, return LIST." (if n - (let ((m 0) (p list)) - (while (consp p) - (setq m (1+ m) p (cdr p))) - (if (<= n 0) p - (if (< n m) (nthcdr (- m n) list) list))) - (while (consp (cdr list)) - (setq list (cdr list))) - list)) + (and (> n 0) + (let ((m (length list))) + (if (< n m) (nthcdr (- m n) list) list))) + (and list + (nthcdr (1- (length list)) list)))) (defun butlast (list &optional n) "Return a copy of LIST with the last N elements removed."