Structural Informatics Group (SIG) logo
Home | Projects | Demos | Downloads | Publications | Local Info | About Us | New site
Go to the first, previous, next, last section, table of contents.



type: special form (fsubr)
location: built-in
source file: xlcont.c
Common LISP compatible: yes
supported on: all machines


(prog  ( [ <binding> ... ]  )  [ <expr> ... ]  )
        <binding>       -       a variable binding which is can take one of 
                                <symbol>    or     ( <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  


The PROG special form is basically a 'block' construct (like a PASCAL BEGIN / END) that contains symbols (with optional initializations) and a block of code (expressions) to evaluate. The PROG form evaluates its initializations in no specified order (as opposed to PROG* which does it sequential order). The first form after the PROG is the <binding> form. It contains a series of <symbol>'s or <binding>'s. 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. There is no specification as to the order of execution of the bindings or the step expressions - except that they happen all together. If a RETURN form is evaluated, its value will be returned. Otherwise, NIL is returned. When the PROG is finished execution, the <symbol>'s that were defined will no longer exist or retain their values.


(prog () (print "hello"))               ; prints  "hello"  returns NIL
(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

Go to the first, previous, next, last section, table of contents.