XLISP &rest

Nyquist / XLISP 2.0 - Contents | Tutorials | Examples | Reference

# &rest

Type: | - | keyword
Source: | - | xleval.c

## Syntax

&rest [rest-arg]
  rest-arg - rest argument symbol

## Description

In XLISP, there are several times that you define a formal argument list for a body of code like defun , defmacro , :answer and lambda. All of the formal arguments that are defined are required to appear in the invocation of the defined function or operation. If there are any &optional arguments defined, they will be filled in order. If there is a '&rest' argument defined, and all the required formal arguments and &optional arguments are filled, any and all further parameters will be passed into the function via the 'rarg' argument. There can be only one 'rest-arg' argument for '&rest'. If there are insufficient parameters for any of the &optional or '&rest' arguments, they will contain NIL. At the end of the function or operation execution, these local symbols and their values are removed.

## Examples

    (defun foo                             ; define function FOO
      (a b &optional c d &rest e)          ;   with some of each argument
      (print a) (print b)
      (print c) (print d)                  ;   print out each
      (print e))
    (foo)                                  ; error: too few arguments
    (foo 1)                                ; error: too few arguments
    (foo 1 2)                              ; prints 1 2 NIL NIL NIL
    (foo 1 2 3)                            ; prints 1 2 3 NIL NIL
    (foo 1 2 3 4)                          ; prints 1 2 3 4 NIL
    (foo 1 2 3 4 5)                        ; prints 1 2 3 4 (5)
    (foo 1 2 3 4 5 6 7 8 9)                ; prints 1 2 3 4 (5 6 7 8 9)

    (defun my-add                          ; define function MY-ADD
      (num1 &rest num-list &aux sum)       ;   with 1 arg, rest, 1 aux var
      (setq sum num1)                      ;   clear SUM
      (dotimes (i (length num-list) )      ;   loop through rest list
        (setq sum (+ sum (car num-list)))  ;      add the number to sum
        (setq num-list (cdr num-list)))    ;      and remove num from list
      sum)                                 ;   return sum when finished
    (my-add 1 2 3 4)                       ; returns 10
    (my-add 5 5 5 5 5)                     ; returns 25

See the &rest keyword in the XLISP 2.0 manual.

Back to Top

Nyquist / XLISP 2.0 - Contents | Tutorials | Examples | Reference