ToC DocOverview CGDoc RelNotes Index PermutedIndex
Allegro CL

ANSI Common Lisp   14 Conses   14.2 Dictionary of Conses

 14.2.29 last Function

Syntax:
last list &optional n    tail

Arguments and Values:
list - a list, which might be a dotted list but must not be a circular list.

n - a non-negative integer. The default is 1.

tail - an object.

Description:
last returns the last n conses (not the last n elements) of list). If list is (), last returns ().

If n is zero, the atom that terminates list is returned. If n is greater than or equal to the number of cons cells in list, the result is list.

Examples:
``` (last nil)   NIL
(last '(1 2 3))  (3)
(last '(1 2 . 3))  (2 . 3)
(setq x (list 'a 'b 'c 'd))  (A B C D)
(last x)  (D)
(rplacd (last x) (list 'e 'f)) x  (A B C D E F)
(last x)  (F)

(last '(a b c))    (C)

(last '(a b c) 0)  ()
(last '(a b c) 1)  (C)
(last '(a b c) 2)  (B C)
(last '(a b c) 3)  (A B C)
(last '(a b c) 4)  (A B C)

(last '(a . b) 0)   B
(last '(a . b) 1)  (A . B)
(last '(a . b) 2)  (A . B)
```

Exceptional Situations:
The consequences are undefined if list is a circular list. Should signal an error of type type-error if n is not a non-negative integer.

butlast, nth

Notes:
The following code could be used to define last.

``` (defun last (list &optional (n 1))
(check-type n (integer 0))
(do ((l list (cdr l))
(r list)
(i 0 (+ i 1)))
((atom l) r)
(if (>= i n) (pop r))))
```

Allegro CL Implementation Details:
None.