XLISP prog*

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

# prog*

Type: | - | special form (fsubr)
Source: | - | xlcont.c

## Syntax

(prog* ([binding ... ]) [expr ... ])
  binding - a variable binding which is can take one of
    symbol
    (symbol init-expr)
    symbol - a symbol
    init-expr - an initialization expression for symbol
  expr - expressions comprising the body of the loop which may contain returns, gos or tags for go
  returns - NIL or the argument passed to the return function

## Description

The 'prog*' special form is basically a 'block' construct that contains symbols with optional initializations and a block of code [expressions] to evaluate. The 'prog*' special form evaluates its initializations in sequential order as opposed to prog which does it in no specified order. The first form after the 'prog*' is the 'binding' form. It contains a series of 'symbols' or 'bindings'. The 'binding' is a 'symbol' followed by an initialization expression 'init-expr'. If there is no 'init-expr', the 'symbol' will be initialized to NIL. The order of execution of the bindings is sequential. If a return form is evaluated, its value will be returned. Otherwise, NIL is returned. When the 'prog*' is finished execution, the 'symbols' that were defined will no longer exist or retain their values.

## Examples

    (prog* (i j)                 ; PROG* with vars I and J
           (print i) (print j))  ; prints  NIL NIL  returns NIL

    (prog* ((i 1) (j 2))         ; PROG* with vars I and J
           (print i) (print j)
           (return (+ i j)))     ; prints 1 2  returns 3

    (prog* () (print "hello"))   ; prints "hello"  returns NIL

    (prog ((i 1) (j (+ i 1)))    ; PROG won't work due to order
          (print (+ i j)) )      ; error: unbound variable - I

    (prog* ((i 1) (j (+ i 1)))   ; PROG* will work due to order
           (print (+ i j)) )     ; prints 3  returns NIL

See the prog* special form in the XLISP 2.0 manual.

Back to Top

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