XLISP > XLISP 2.0  -  Contents  -  Reference  -  Previous | Next


Type:   -   keyword
Source:   -   xleval.c


&optional [opt-arg | (opt-arg [opt-value [supplied-p]])] ...
opt-arg - optional argument
opt-value - optional argument initialization value
supplied-p - optional argument existence variable


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 are insufficient parameters for the '&optional' arguments, they will contain NIL , unless the arguments have an 'opt-value' initial value specified. The 'supplied-p' variable, if specified, will contain  T  if the 'opt-arg' was supplied by the function call and NIL if it was not supplied by the function call. This 'supplied-p' variable allows the programmer to test for an arguments existence. At the end of the function or operation execution, these local symbols and their values are are removed.


(defun foo                              ; define function FOO
  (a &optional b (c 1) )                ;   with some optional args
  (print a) (print b) (print c))
(foo)                                   ; error: too few arguments
(foo 1)                                 ; prints 1 NIL 1
(foo 1 2)                               ; prints 1 2 1
(foo 1 2 3)                             ; prints 1 2 3

(defun fee                              ; define function FEE
  (a &optional (b 9 b-passed) )         ;   with some optional args
  (print a) (print b)
  (if b-passed (print "b was passed")
               (print "b not passed")))
(fee 1)                                 ; prints 1 9 "b not passed"
(fee 1 2)                               ; prints 1 2 "b was passed"

See the &optional keyword in the XLISP 2.0 manual.

  Back to Top

XLISP > XLISP 2.0  -  Contents  -  Reference  -  Previous | Next