Annotation of 43BSD/ucb/lisp/lisplib/manual/ch4.r, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3: 
                      4: 
                      5: 
                      6: 
                      7: 
                      8: 
                      9: 
                     10: 
                     11: 
                     12: 
                     13: 
                     14: 
                     15: 
                     16: 
                     17: 
                     18: 
                     19: 
                     20: 
                     21: 
                     22: 
                     23: 
                     24: 
                     25: 
                     26: 
                     27: 
                     28: 
                     29: 
                     30: 
                     31: 
                     32: 
                     33: 
                     34: 
                     35: 
                     36: 
                     37: 
                     38: 
                     39: 
                     40: 
                     41: 
                     42: 
                     43: 
                     44: 
                     45: 
                     46: 
                     47: 
                     48: 
                     49: 
                     50: 
                     51: 
                     52: 
                     53: 
                     54: 
                     55: 
                     56: 
                     57: 
                     58: 
                     59: 
                     60: 9
                     61: 
                     62: 9
                     63: 
                     64: 
                     65: 
                     66: 
                     67: 
                     68: 
                     69: 
                     70: 
                     71: 
                     72: 
                     73:                          CHAPTER  4
                     74: 
                     75: 
                     76:                      Special Functions
                     77: 
                     78: 
                     79: 
                     80: 
                     81: (and [g_arg1 ...])
                     82: 
                     83:      RETURNS: the value of the last argument  if  all  argu-
                     84:               ments  evaluate  to a non-nil value, otherwise
                     85:               _a_n_d returns nil.  It returns t if there are no
                     86:               arguments.
                     87: 
                     88:      NOTE: the arguments are evaluated  left  to  right  and
                     89:            evaluation  will cease with the first nil encoun-
                     90:            tered.
                     91: 
                     92: (apply 'u_func 'l_args)
                     93: 
                     94:      RETURNS: the result of applying function u_func to  the
                     95:               arguments in the list l_args.
                     96: 
                     97:      NOTE: If u_func is a lambda, then  the  (_l_e_n_g_t_h _l__a_r_g_s)
                     98:            should  equal the number of formal parameters for
                     99:            the u_func.  If u_func is  a  nlambda  or  macro,
                    100:            then l_args is bound to the single formal parame-
                    101:            ter.
                    102: 
                    103: 
                    104: 
                    105: 
                    106: 
                    107: 
                    108: 
                    109: 
                    110: 
                    111: 
                    112: 
                    113: 
                    114: 
                    115: 
                    116: 
                    117: 
                    118: 
                    119: 
                    120: 
                    121: 
                    122: 
                    123: 
                    124: 
                    125: 9
                    126: 
                    127: 9Special Functions                                        4-2
                    128: 
                    129: 
                    130: 
                    131: 
                    132: 
                    133: 
                    134: 
                    135: Special Functions                                        4-1
                    136: 
                    137: 
                    138: 
                    139:     ____________________________________________________
                    140: 
                    141:     ; _a_d_d_1 is a lambda of 1 argument
                    142:     -> (_a_p_p_l_y '_a_d_d_1 '(_3))
                    143:     4
                    144: 
                    145:     ; we will define _p_l_u_s_1 as a macro which will be equivalent to _a_d_d_1
                    146:     -> (_d_e_f _p_l_u_s_1 (_m_a_c_r_o (_a_r_g) (_l_i_s_t '_a_d_d_1 (_c_a_d_r _a_r_g))))
                    147:     plus1
                    148:     -> (_p_l_u_s_1 _3)
                    149:     4
                    150: 
                    151:     ; now if we _a_p_p_l_y a macro we obtain the form it changes to.
                    152:     -> (_a_p_p_l_y '_p_l_u_s_1 '(_p_l_u_s_1 _3))
                    153:     (add1 3)
                    154: 
                    155:     ; if we _f_u_n_c_a_l_l a macro however, the result of the macro is _e_v_a_led
                    156:     ; before it is returned.
                    157:     -> (_f_u_n_c_a_l_l '_p_l_u_s_1 '(_p_l_u_s_1 _3))
                    158:     4
                    159: 
                    160:     ; for this particular macro, the _c_a_r of the _a_r_g is not checked
                    161:     ; so that this too will work
                    162:     -> (_a_p_p_l_y '_p_l_u_s_1 '(_f_o_o _3))
                    163:     (add1 3)
                    164: 
                    165:     ____________________________________________________
                    166: 
                    167: 
                    168: 
                    169: 
                    170: (arg ['x_numb])
                    171: 
                    172:      RETURNS: if x_numb  is  specified  then  the  x_numb'_t_h
                    173:               argument  to  the enclosing lexpr If x_numb is
                    174:               not specified then this returns the number  of
                    175:               arguments to the enclosing lexpr.
                    176: 
                    177:      NOTE: it is an error to the interpreter  if  x_numb  is
                    178:            given and out of range.
                    179: 
                    180: 
                    181: 
                    182: 
                    183: 
                    184: 
                    185: 
                    186: 
                    187: 
                    188: 
                    189: 
                    190: 9
                    191: 
                    192: 9                                   Printed: January 31, 1984
                    193: 
                    194: 
                    195: 
                    196: 
                    197: 
                    198: 
                    199: 
                    200: Special Functions                                        4-2
                    201: 
                    202: 
                    203: (break [g_message ['g_pred]])
                    204: 
                    205:      WHERE:   if g_message is not given it is assumed to  be
                    206:               the null string, and if g_pred is not given it
                    207:               is assumed to be t.
                    208: 
                    209:      RETURNS: the value of (*_b_r_e_a_k '_g__p_r_e_d '_g__m_e_s_s_a_g_e)
                    210: 
                    211: (*break 'g_pred 'g_message)
                    212: 
                    213:      RETURNS: nil immediately if g_pred  is  nil,  else  the
                    214:               value  of  the next (return 'value) expression
                    215:               typed in at top level.
                    216: 
                    217:      SIDE EFFECT: If the  predicate,  g_pred,  evaluates  to
                    218:                   non-null, the lisp system stops and prints
                    219:                   out `Break '  followed  by  g_message.  It
                    220:                   then  enters a break loop which allows one
                    221:                   to interactively debug a program.  To con-
                    222:                   tinue  execution  from a break you can use
                    223:                   the _r_e_t_u_r_n  function.  to  return  to  top
                    224:                   level  or another break level, you can use
                    225:                   _r_e_t_b_r_k or _r_e_s_e_t.
                    226: 
                    227: (caseq 'g_key-form l_clause1 ...)
                    228: 
                    229:      WHERE:   l_clause_i is a list of the form  (g_comparator
                    230:               ['g_form_i  ...]).  The comparators may be sym-
                    231:               bols, small fixnums, a list of  small  fixnums
                    232:               or symbols.
                    233: 
                    234:      NOTE: The way caseq works is that it  evaluates  g_key-
                    235:            form, yielding a value we will call the selector.
                    236:            Each clause is examined  until  the  selector  is
                    237:            found consistent with the comparator.  For a sym-
                    238:            bol, or a fixnum, this means the two must be  _e_q.
                    239:            For  a list, this means that the selector must be
                    240:            _e_q to some element of the list.
                    241: 
                    242:            The comparator consisting of  the  symbol  t  has
                    243:            special  semantics: it matches anything, and con-
                    244:            sequently, should be the last comparator.
                    245: 
                    246:            In any case, having chosen a clause, _c_a_s_e_q evalu-
                    247:            ates each form within that clause and
                    248: 
                    249:      RETURNS: the value of the last form.  If no comparators
                    250:               are matched, _c_a_s_e_q returns nil.
                    251: 
                    252: 
                    253: 
                    254: 
                    255: 9
                    256: 
                    257: 9                                   Printed: January 31, 1984
                    258: 
                    259: 
                    260: 
                    261: 
                    262: 
                    263: 
                    264: 
                    265: Special Functions                                        4-3
                    266: 
                    267: 
                    268: 
                    269:     ____________________________________________________
                    270: 
                    271:     Here are two ways of defining the same function:
                    272:     ->(_d_e_f_u_n _f_a_t_e (_p_e_r_s_o_n_n_a)
                    273:             (_c_a_s_e_q _p_e_r_s_o_n_n_a
                    274:               (_c_o_w '(_j_u_m_p_e_d _o_v_e_r _t_h_e _m_o_o_n))
                    275:               (_c_a_t '(_p_l_a_y_e_d _n_e_r_o))
                    276:               ((_d_i_s_h _s_p_o_o_n) '(_r_a_n _a_w_a_y _w_i_t_h _e_a_c_h _o_t_h_e_r))
                    277:               (_t '(_l_i_v_e_d _h_a_p_p_i_l_y _e_v_e_r _a_f_t_e_r))))
                    278:     fate
                    279:     ->(_d_e_f_u_n _f_a_t_e (_p_e_r_s_o_n_n_a)
                    280:             (_c_o_n_d
                    281:                     ((_e_q _p_e_r_s_o_n_n_a '_c_o_w) '(_j_u_m_p_e_d _o_v_e_r _t_h_e _m_o_o_n))
                    282:                     ((_e_q _p_e_r_s_o_n_n_a '_c_a_t) '(_p_l_a_y_e_d _n_e_r_o))
                    283:                     ((_m_e_m_q _p_e_r_s_o_n_n_a '(_d_i_s_h _s_p_o_o_n)) '(_r_a_n _a_w_a_y _w_i_t_h _e_a_c_h _o_t_h_e_r))
                    284:                     (_t '(_l_i_v_e_d _h_a_p_p_i_l_y _e_v_e_r _a_f_t_e_r))))
                    285:     fate
                    286:     ____________________________________________________
                    287: 
                    288: 
                    289: 
                    290: 
                    291: (catch g_exp [ls_tag])
                    292: 
                    293:      WHERE:   if ls_tag is not given, it is  assumed  to  be
                    294:               nil.
                    295: 
                    296:      RETURNS: the result of (*_c_a_t_c_h '_l_s__t_a_g _g__e_x_p)
                    297: 
                    298:      NOTE: catch is defined as a macro.
                    299: 
                    300: (*catch 'ls_tag g_exp)
                    301: 
                    302:      WHERE:   ls_tag is either a symbol or a  list  of  sym-
                    303:               bols.
                    304: 
                    305:      RETURNS: the result of evaluating g_exp  or  the  value
                    306:               thrown during the evaluation of g_exp.
                    307: 
                    308:      SIDE EFFECT: this first sets up a `catch frame' on  the
                    309:                   lisp  runtime  stack.   Then  it begins to
                    310:                   evaluate g_exp.  If g_exp  evaluates  nor-
                    311:                   mally,  its  value  is returned.  If, how-
                    312:                   ever, a value is thrown during the evalua-
                    313:                   tion of g_exp then this *catch will return
                    314:                   with that value if one of these  cases  is
                    315:                   true:
                    316: 
                    317:      (1)  the tag thrown to is ls_tag
                    318: 
                    319:      (2)  ls_tag is a list and the tag thrown to is a member
                    320:           of this list
                    321: 
                    322: 
                    323:                                    Printed: January 31, 1984
                    324: 
                    325: 
                    326: 
                    327: 
                    328: 
                    329: 
                    330: 
                    331: Special Functions                                        4-4
                    332: 
                    333: 
                    334:      (3)  ls_tag is nil.
                    335: 
                    336:      NOTE: Errors are  implemented  as  a  special  kind  of
                    337:            throw.   A  catch  with  no tag will not catch an
                    338:            error but a catch whose tag  is  the  error  type
                    339:            will  catch  that  type of error.  See Chapter 10
                    340:            for more information.
                    341: 
                    342: (comment [g_arg ...])
                    343: 
                    344:      RETURNS: the symbol comment.
                    345: 
                    346:      NOTE: This does absolutely nothing.
                    347: 
                    348: (cond [l_clause1 ...])
                    349: 
                    350:      RETURNS: the last value evaluated in the  first  clause
                    351:               satisfied.   If  no clauses are satisfied then
                    352:               nil is returned.
                    353: 
                    354:      NOTE: This is  the  basic  conditional  `statement'  in
                    355:            lisp.   The  clauses  are  processed from left to
                    356:            right.   The  first  element  of  a   clause   is
                    357:            evaluated.   If  it evaluated to a non-null value
                    358:            then that clause is satisfied and  all  following
                    359:            elements  of that clause are evaluated.  The last
                    360:            value computed is returned as the  value  of  the
                    361:            cond.  If there is just one element in the clause
                    362:            then its value is returned.  If the first element
                    363:            of a clause evaluates to nil, then the other ele-
                    364:            ments of that clause are not  evaluated  and  the
                    365:            system moves to the next clause.
                    366: 
                    367: (cvttointlisp)
                    368: 
                    369:      SIDE EFFECT: The reader is modified to conform with the
                    370:                   Interlisp syntax.  The character % is made
                    371:                   the escape character and special  meanings
                    372:                   for  comma,  backquote  and  backslash are
                    373:                   removed. Also the reader is told  to  con-
                    374:                   vert upper case to lower case.
                    375: 
                    376: 
                    377: 
                    378: 
                    379: 
                    380: 
                    381: 
                    382: 
                    383: 
                    384: 
                    385: 
                    386: 9
                    387: 
                    388: 9                                   Printed: January 31, 1984
                    389: 
                    390: 
                    391: 
                    392: 
                    393: 
                    394: 
                    395: 
                    396: Special Functions                                        4-5
                    397: 
                    398: 
                    399: (cvttofranzlisp)
                    400: 
                    401:      SIDE EFFECT: FRANZ LISP's default syntax is reinstated.
                    402:                   One  would  run this function after having
                    403:                   run any of  the  other  _c_v_t_t_o-  functions.
                    404:                   Backslash  is  made  the escape character,
                    405:                   super-brackets work again, and the  reader
                    406:                   distinguishes   between  upper  and  lower
                    407:                   case.
                    408: 
                    409: (cvttomaclisp)
                    410: 
                    411:      SIDE EFFECT: The reader is  modified  to  conform  with
                    412:                   Maclisp  syntax.   The character / is made
                    413:                   the escape character and the special mean-
                    414:                   ings for backslash, left and right bracket
                    415:                   are removed.  The  reader  is  made  case-
                    416:                   insensitive.
                    417: 
                    418: (cvttoucilisp)
                    419: 
                    420:      SIDE EFFECT: The reader is modified to conform with UCI
                    421:                   Lisp  syntax.  The character / is made the
                    422:                   escape character, tilde is made  the  com-
                    423:                   ment character, exclamation point takes on
                    424:                   the  unquote  function  normally  held  by
                    425:                   comma,  and  backslash,  comma,  semicolon
                    426:                   become normal characters.  Here  too,  the
                    427:                   reader is made case-insensitive.
                    428: 
                    429: (debug s_msg)
                    430: 
                    431:      SIDE EFFECT: Enter  the  Fixit  package  described   in
                    432:                   Chapter  15.   This  package allows you to
                    433:                   examine the evaluation  stack  in  detail.
                    434:                   To  leave the Fixit package type 'ok'.
                    435: 
                    436: (debugging 'g_arg)
                    437: 
                    438:      SIDE EFFECT: If g_arg is non-null,  Franz  unlinks  the
                    439:                   transfer  tables, does a (*_r_s_e_t _t) to turn
                    440:                   on  evaluation  monitoring  and  sets  the
                    441:                   all-error  catcher  (ER%all)  to be _d_e_b_u_g-
                    442:                   _e_r_r-_h_a_n_d_l_e_r.  If g_arg is nil, all of  the
                    443:                   above changes are undone.
                    444: 
                    445: 
                    446: 
                    447: 
                    448: 
                    449: 
                    450: 
                    451: 9
                    452: 
                    453: 9                                   Printed: January 31, 1984
                    454: 
                    455: 
                    456: 
                    457: 
                    458: 
                    459: 
                    460: 
                    461: Special Functions                                        4-6
                    462: 
                    463: 
                    464: (declare [g_arg ...])
                    465: 
                    466:      RETURNS: nil
                    467: 
                    468:      NOTE: this is a no-op to the evaluator.  It has special
                    469:            meaning to the compiler (see Chapter 12).
                    470: 
                    471: (def s_name (s_type l_argl g_exp1 ...))
                    472: 
                    473:      WHERE:   s_type is one of  lambda,  nlambda,  macro  or
                    474:               lexpr.
                    475: 
                    476:      RETURNS: s_name
                    477: 
                    478:      SIDE EFFECT: This defines the function  s_name  to  the
                    479:                   lisp  system.   If  s_type  is  nlambda or
                    480:                   macro then the argument list  l_argl  must
                    481:                   contain exactly one non-nil symbol.
                    482: 
                    483: (defmacro s_name l_arg g_exp1 ...)
                    484: (defcmacro s_name l_arg g_exp1 ...)
                    485: 
                    486:      RETURNS: s_name
                    487: 
                    488:      SIDE EFFECT: This defines the  macro  s_name.  _d_e_f_m_a_c_r_o
                    489:                   makes  it  easy  to  write macros since it
                    490:                   makes the syntax just like _d_e_f_u_n.  Further
                    491:                   information   on  _d_e_f_m_a_c_r_o  is  in  8.3.2.
                    492:                   _d_e_f_c_m_a_c_r_o defines compiler-only macros, or
                    493:                   cmacros.  A  cmacro  is stored on the pro-
                    494:                   perty list of a symbol under the indicator
                    495:                   cmacro.  Thus a function can have a normal
                    496:                   definition and a cmacro  definition.   For
                    497:                   an  example of the use of cmacros, see the
                    498:                   definitions   of   nthcdr   and   nth   in
                    499:                   /usr/lib/lisp/common2.l
                    500: 
                    501: (defun s_name [s_mtype] ls_argl g_exp1 ... )
                    502: 
                    503:      WHERE:   s_mtype is one of fexpr, expr, args or macro.
                    504: 
                    505:      RETURNS: s_name
                    506: 
                    507:      SIDE EFFECT: This defines the function s_name.
                    508: 
                    509:      NOTE: this exists for Maclisp compatibility, it is just
                    510:            a  macro  which changes the defun form to the def
                    511:            form.   An  s_mtype  of  fexpr  is  converted  to
                    512:            nlambda  and of expr to lambda. Macro remains the
                    513:            same.  If ls_arg1 is a non-nil symbol,  then  the
                    514:            type  is  assumed  to be lexpr and ls_arg1 is the
                    515:            symbol which is bound to the number of args  when
                    516:            the function is entered.
                    517: 
                    518: 
                    519:                                    Printed: January 31, 1984
                    520: 
                    521: 
                    522: 
                    523: 
                    524: 
                    525: 
                    526: 
                    527: Special Functions                                        4-7
                    528: 
                    529: 
                    530:            For compatibility with  the  Lisp  Machine  Lisp,
                    531:            there are three types of optional parameters that
                    532:            can occur in ls_argl:   &_o_p_t_i_o_n_a_l  declares  that
                    533:            the  following  symbols  are optional, and may or
                    534:            may not appear in the argument list to the  func-
                    535:            tion, &_r_e_s_t _s_y_m_b_o_l declares that all forms in the
                    536:            function call that are not accounted for by  pre-
                    537:            vious  lambda bindings are to be assigned to _s_y_m_-
                    538:            _b_o_l, and &_a_u_x _f_o_r_m_1 ... _f_o_r_m_n declares  that  the
                    539:            _f_o_r_m_i  are either symbols, in which case they are
                    540:            lambda bound to nil, or lists, in which case  the
                    541:            first  element of the list is lambda bound to the
                    542:            second, evaluated element.
                    543: 
                    544: 
                    545:     ____________________________________________________
                    546: 
                    547:     ; _d_e_f and _d_e_f_u_n here are used to define identical functions
                    548:     ; you can decide for yourself which is easier to use.
                    549:     -> (_d_e_f _a_p_p_e_n_d_1 (_l_a_m_b_d_a (_l_i_s _e_x_t_r_a) (_a_p_p_e_n_d _l_i_s (_l_i_s_t _e_x_t_r_a))))
                    550:     append1
                    551: 
                    552:     -> (_d_e_f_u_n _a_p_p_e_n_d_1 (_l_i_s _e_x_t_r_a) (_a_p_p_e_n_d _l_i_s (_l_i_s_t _e_x_t_r_a)))
                    553:     append1
                    554: 
                    555:     ; Using the & forms...
                    556:     -> (_d_e_f_u_n _t_e_s_t (_a _b &_o_p_t_i_o_n_a_l _c &_a_u_x (_r_e_t_v_a_l _0) &_r_e_s_t _z)
                    557:             (_i_f _c _t_h_e_m (_m_s_g "_O_p_t_i_o_n_a_l _a_r_g _p_r_e_s_e_n_t" _N
                    558:                             "_c _i_s " _c _N))
                    559:             (_m_s_g "_r_e_s_t _i_s " _z _N
                    560:                  "_r_e_t_v_a_l _i_s " _r_e_t_v_a_l _N))
                    561:     test
                    562:     -> (_t_e_s_t _1 _2 _3 _4)
                    563:     Optional arg present
                    564:     c is 3
                    565:     rest is (4)
                    566:     retval is 0
                    567:     ____________________________________________________
                    568: 
                    569: 
                    570: 
                    571: 
                    572: 
                    573: 
                    574: 
                    575: 
                    576: 
                    577: 
                    578: 
                    579: 
                    580: 
                    581: 
                    582: 9
                    583: 
                    584: 9                                   Printed: January 31, 1984
                    585: 
                    586: 
                    587: 
                    588: 
                    589: 
                    590: 
                    591: 
                    592: Special Functions                                        4-8
                    593: 
                    594: 
                    595: (defvar s_variable ['g_init])
                    596: 
                    597:      RETURNS: s_variable.
                    598: 
                    599:      NOTE: This form is put at the top level in files,  like
                    600:            _d_e_f_u_n.
                    601: 
                    602:      SIDE EFFECT: This declares s_variable to be special. If
                    603:                   g_init   is   present  and  s_variable  is
                    604:                   unbound  when  the  file   is   read   in,
                    605:                   s_variable  will  be  set  to the value of
                    606:                   g_init.  An advantage  of  `(defvar  foo)'
                    607:                   over  `(declare (special foo))' is that if
                    608:                   a file containing defvars  is  loaded  (or
                    609:                   fasl'ed)  in during compilation, the vari-
                    610:                   ables mentioned in the  defvar's  will  be
                    611:                   declared  special.   The  only way to have
                    612:                   that effect with `(declare (special foo))'
                    613:                   is to _i_n_c_l_u_d_e the file.
                    614: 
                    615: (do l_vrbs l_test g_exp1 ...)
                    616: 
                    617:      RETURNS: the last form in the cdr of l_test  evaluated,
                    618:               or  a  value  explicitly  given  by  a  return
                    619:               evaluated within the do body.
                    620: 
                    621:      NOTE: This is the basic iteration form for FRANZ  LISP.
                    622:            l_vrbs  is a list of zero or more var-init-repeat
                    623:            forms.  A var-init-repeat form looks like:
                    624:                 (s_name [g_init [g_repeat]])
                    625:            There  are  three  cases  depending  on  what  is
                    626:            present  in the form.  If just s_name is present,
                    627:            this means that when the do is entered, s_name is
                    628:            lambda-bound  to nil and is never modified by the
                    629:            system (though the program is certainly  free  to
                    630:            modify    its    value).     If   the   form   is
                    631:            (s_name 'g_init) then the only difference is that
                    632:            s_name  is  lambda-bound  to  the value of g_init
                    633:            instead of nil.  If g_repeat is also present then
                    634:            s_name is lambda-bound to g_init when the loop is
                    635:            entered and after each pass through the  do  body
                    636:            s_name is  bound to the value of g_repeat.
                    637:            l_test is either nil or has the form  of  a  cond
                    638:            clause.   If  it  is nil then the do body will be
                    639:            evaluated only once and the do will  return  nil.
                    640:            Otherwise,  before  the  do body is evaluated the
                    641:            car of l_test is evaluated and if the  result  is
                    642:            non-null,  this  signals  an  end to the looping.
                    643:            Then  the  rest  of  the  forms  in  l_test   are
                    644:            evaluated  and  the  value  of  the  last  one is
                    645:            returned as the value of the do.  If the  cdr  of
                    646:            l_test  is nil, then nil is returned -- thus this
                    647:            is not exactly like a cond clause.
                    648: 
                    649: 
                    650:                                    Printed: January 31, 1984
                    651: 
                    652: 
                    653: 
                    654: 
                    655: 
                    656: 
                    657: 
                    658: Special Functions                                        4-9
                    659: 
                    660: 
                    661:            g_exp1 and those forms  which  follow  constitute
                    662:            the  do  body.  A do body is like a prog body and
                    663:            thus may have labels and one may  use  the  func-
                    664:            tions go and return.
                    665:            The sequence of evaluations is this:
                    666: 
                    667:      (1)  the init forms are evaluated  left  to  right  and
                    668:           stored in temporary locations.
                    669: 
                    670:      (2)  Simultaneously all do variables are  lambda  bound
                    671:           to the value of their init forms or nil.
                    672: 
                    673:      (3)  If l_test is non-null, then the car  is  evaluated
                    674:           and  if  it  is non-null, the rest of the forms in
                    675:           l_test  are  evaluated  and  the  last  value   is
                    676:           returned as the value of the do.
                    677: 
                    678:      (4)  The forms in the do body  are  evaluated  left  to
                    679:           right.
                    680: 
                    681:      (5)  If l_test is nil the do function returns with  the
                    682:           value nil.
                    683: 
                    684:      (6)  The repeat forms are evaluated and saved  in  tem-
                    685:           porary locations.
                    686: 
                    687:      (7)  The variables with repeat forms are simultaneously
                    688:           bound to the values of those forms.
                    689: 
                    690:      (8)  Go to step 3.
                    691: 
                    692:      NOTE: there is an alternate form of  do  which  can  be
                    693:            used  when  there is only one do variable.  It is
                    694:            described next.
                    695: 
                    696: 
                    697: 
                    698: 
                    699: 
                    700: 
                    701: 
                    702: 
                    703: 
                    704: 
                    705: 
                    706: 
                    707: 
                    708: 
                    709: 
                    710: 
                    711: 
                    712: 
                    713: 9
                    714: 
                    715: 9                                   Printed: January 31, 1984
                    716: 
                    717: 
                    718: 
                    719: 
                    720: 
                    721: 
                    722: 
                    723: Special Functions                                       4-10
                    724: 
                    725: 
                    726: 
                    727:     ____________________________________________________
                    728: 
                    729:     ; this is  a simple function which numbers the elements of a list.
                    730:     ; It uses a _d_o function with two local variables.
                    731:     -> (_d_e_f_u_n _p_r_i_n_t_e_m (_l_i_s)
                    732:                  (_d_o ((_x_x _l_i_s (_c_d_r _x_x))
                    733:                       (_i _1 (_1+ _i)))
                    734:                      ((_n_u_l_l _x_x) (_p_a_t_o_m "_a_l_l _d_o_n_e") (_t_e_r_p_r))
                    735:                      (_p_r_i_n_t _i)
                    736:                      (_p_a_t_o_m ": ")
                    737:                      (_p_r_i_n_t (_c_a_r _x_x))
                    738:                      (_t_e_r_p_r)))
                    739:     printem
                    740:     -> (_p_r_i_n_t_e_m '(_a _b _c _d))
                    741:     1: a
                    742:     2: b
                    743:     3: c
                    744:     4: d
                    745:     all done
                    746:     nil
                    747:     ->
                    748:     ____________________________________________________
                    749: 
                    750: 
                    751: 
                    752: 
                    753: (do s_name g_init g_repeat g_test g_exp1 ...)
                    754: 
                    755:      NOTE: this is another, less general,  form of  do.   It
                    756:            is evaluated by:
                    757: 
                    758:      (1)  evaluating g_init
                    759: 
                    760:      (2)  lambda binding s_name to value of g_init
                    761: 
                    762:      (3)  g_test is evaluated and if it is not  nil  the  do
                    763:           function returns with nil.
                    764: 
                    765:      (4)  the do body is evaluated beginning at g_exp1.
                    766: 
                    767:      (5)  the repeat form is evaluated and stored in s_name.
                    768: 
                    769:      (6)  go to step 3.
                    770: 
                    771:      RETURNS: nil
                    772: 
                    773: 
                    774: 
                    775: 
                    776: 
                    777: 
                    778: 9
                    779: 
                    780: 9                                   Printed: January 31, 1984
                    781: 
                    782: 
                    783: 
                    784: 
                    785: 
                    786: 
                    787: 
                    788: Special Functions                                       4-11
                    789: 
                    790: 
                    791: (environment [l_when1 l_what1 l_when2 l_what2 ...])
                    792: (environment-maclisp [l_when1 l_what1 l_when2 l_what2 ...])
                    793: (environment-lmlisp [l_when1 l_what1 l_when2 l_what2 ...])
                    794: 
                    795:      WHERE:   the when's  are  a  subset  of  (eval  compile
                    796:               load),  and  the symbols have the same meaning
                    797:               as they do in 'eval-when'.
                    798: 
                    799:               The what's may be
                    800:                       (files file1 file2 ... fileN),
                    801:               which insure that the named files are  loaded.
                    802:               To  see  if  file_i  is  loaded, it looks for a
                    803:               'version'  property  under  file_i's   property
                    804:               list.   Thus  to prevent multiple loading, you
                    805:               should put
                    806:                       (putprop 'myfile t 'version),
                    807:               at the end of myfile.l.
                    808: 
                    809:               Another acceptable form for a what is
                    810:               (syntax type)
                    811:               Where type is either maclisp,  intlisp,  ucil-
                    812:               isp, franzlisp.
                    813: 
                    814:      SIDE EFFECT: _e_n_v_i_r_o_n_m_e_n_t-_m_a_c_l_i_s_p sets  the  environment
                    815:                   to that which `liszt -m' would generate.
                    816: 
                    817:                   _e_n_v_i_r_o_n_m_e_n_t-_l_m_l_i_s_p   sets  up   the   lisp
                    818:                   machine  environment. This is like maclisp
                    819:                   but it has additional macros.
                    820: 
                    821:                   For these specialized  environments,  only
                    822:                   the     files    clauses    are    useful.
                    823:                           (environment-maclisp      (compile
                    824:                   eval) (files foo bar))
                    825: 
                    826:      RETURNS: the last list of files requested.
                    827: 
                    828: (err ['s_value [nil]])
                    829: 
                    830:      RETURNS: nothing (it never returns).
                    831: 
                    832:      SIDE EFFECT: This causes an error and if this error  is
                    833:                   caught  by an _e_r_r_s_e_t then that _e_r_r_s_e_t will
                    834:                   return s_value instead  of  nil.   If  the
                    835:                   second  arg  is given, then it must be nil
                    836:                   (MAClisp compatibility).
                    837: 
                    838: 
                    839: 
                    840: 
                    841: 
                    842: 
                    843: 9
                    844: 
                    845: 9                                   Printed: January 31, 1984
                    846: 
                    847: 
                    848: 
                    849: 
                    850: 
                    851: 
                    852: 
                    853: Special Functions                                       4-12
                    854: 
                    855: 
                    856: (error ['s_message1 ['s_message2]])
                    857: 
                    858:      RETURNS: nothing (it never returns).
                    859: 
                    860:      SIDE EFFECT: s_message1 and s_message2 are  _p_a_t_o_med  if
                    861:                   they  are  given  and  then  _e_r_r is called
                    862:                   (with  no  arguments),  which  causes   an
                    863:                   error.
                    864: 
                    865: (errset g_expr [s_flag])
                    866: 
                    867:      RETURNS: a list of one  element,  which  is  the  value
                    868:               resulting from evaluating g_expr.  If an error
                    869:               occurs during the evaluation of  g_expr,  then
                    870:               the locus of control will return to the _e_r_r_s_e_t
                    871:               which will then return nil (unless  the  error
                    872:               was  caused  by a call to _e_r_r, with a non-null
                    873:               argument).
                    874: 
                    875:      SIDE EFFECT: S_flag  is  evaluated  before  g_expr   is
                    876:                   evaluated. If s_flag is not given, then it
                    877:                   is assumed to be t.  If  an  error  occurs
                    878:                   during   the  evaluation  of  g_expr,  and
                    879:                   s_flag evaluated to a non-null value, then
                    880:                   the  error  message  associated  with  the
                    881:                   error is printed before control returns to
                    882:                   the errset.
                    883: 
                    884: (eval 'g_val ['x_bind-pointer])
                    885: 
                    886:      RETURNS: the result of evaluating g_val.
                    887: 
                    888:      NOTE: The evaluator evaluates g_val in this way:
                    889:            If g_val is a symbol, then the evaluator  returns
                    890:            its  value.   If  g_val had never been assigned a
                    891:            value, then this  causes  an  `Unbound  Variable'
                    892:            error.   If  x_bind-pointer  is  given,  then the
                    893:            variable  is  evaluated  with  respect  to   that
                    894:            pointer  (see  _e_v_a_l_f_r_a_m_e  for  details  on  bind-
                    895:            pointers).
                    896: 
                    897:            If g_val is of type  value,  then  its  value  is
                    898:            returned.   If  g_val  is  of any other type than
                    899:            list, g_val is returned.
                    900: 
                    901:            If g_val is a list object then g_val is either  a
                    902:            function  call  or array reference.  Let g_car be
                    903:            the  first  element  of  g_val.   We  continually
                    904:            evaluate g_car until we end up with a symbol with
                    905:            a non-null  function  binding  or  a  non-symbol.
                    906:            Call what we end up with: g_func.
                    907: 
                    908:            G_func must be one of three types:  list,  binary
                    909: 
                    910: 
                    911:                                    Printed: January 31, 1984
                    912: 
                    913: 
                    914: 
                    915: 
                    916: 
                    917: 
                    918: 
                    919: Special Functions                                       4-13
                    920: 
                    921: 
                    922:            or array.  If it is a list then the first element
                    923:            of the list, which we shall call g_functype, must
                    924:            be  either  lambda,  nlambda, macro or lexpr.  If
                    925:            g_func is a binary, then its discipline, which we
                    926:            shall call g_functype, is either lambda, nlambda,
                    927:            macro or a string.  If g_func is  an  array  then
                    928:            this  form  is evaluated specially, see Chapter 9
                    929:            on arrays.  If g_func is a list or  binary,  then
                    930:            g_functype  will  determine  how the arguments to
                    931:            this function, the cdr of g_val,  are  processed.
                    932:            If g_functype is a string, then this is a foreign
                    933:            function call (see 8.5 for more details).
                    934: 
                    935:            If g_functype is lambda or lexpr,  the  arguments
                    936:            are  evaluated  (by calling _e_v_a_l recursively) and
                    937:            stacked.  If g_functype is nlambda then the argu-
                    938:            ment  list  is  stacked.   If g_functype is macro
                    939:            then the entire form, g_val is stacked.
                    940: 
                    941:            Next, the formal variables are lambda bound.  The
                    942:            formal  variables  are  the  cadr  of g_func.  If
                    943:            g_functype is  nlambda,  lexpr  or  macro,  there
                    944:            should  only  be one formal variable.  The values
                    945:            on the stack are lambda bound to the formal vari-
                    946:            ables  except  in  the case of a lexpr, where the
                    947:            number of actual arguments is bound to the formal
                    948:            variable.
                    949: 
                    950:            After  the  binding  is  done,  the  function  is
                    951:            invoked,  either by jumping to the entry point in
                    952:            the case of a binary or by evaluating the list of
                    953:            forms  beginning  at  cddr g_func.  The result of
                    954:            this function invocation is returned as the value
                    955:            of the call to eval.
                    956: 
                    957: (evalframe 'x_pdlpointer)
                    958: 
                    959:      RETURNS: an evalframe  descriptor  for  the  evaluation
                    960:               frame    just    before    x_pdlpointer.    If
                    961:               x_pdlpointer is nil, it returns the evaluation
                    962:               frame  of  the  frame  just before the current
                    963:               call to _e_v_a_l_f_r_a_m_e.
                    964: 
                    965:      NOTE: An evalframe descriptor describes a call to _e_v_a_l,
                    966:            _a_p_p_l_y or _f_u_n_c_a_l_l.  The form of the descriptor is
                    967:            (_t_y_p_e  _p_d_l-_p_o_i_n_t_e_r  _e_x_p_r_e_s_s_i_o_n  _b_i_n_d-_p_o_i_n_t_e_r  _n_p-
                    968:            _i_n_d_e_x _l_b_o_t-_i_n_d_e_x)
                    969:            where type is `eval' if this describes a call  to
                    970:            _e_v_a_l  or  `apply'  if  this is a call to _a_p_p_l_y or
                    971:            _f_u_n_c_a_l_l.    pdl-pointer   is   a   number   which
                    972:            describes this context. It can be passed to _e_v_a_l_-
                    973:            _f_r_a_m_e to obtain the next descriptor  and  can  be
                    974:            passed  to  _f_r_e_t_u_r_n  to  cause a return from this
                    975: 
                    976: 
                    977:                                    Printed: January 31, 1984
                    978: 
                    979: 
                    980: 
                    981: 
                    982: 
                    983: 
                    984: 
                    985: Special Functions                                       4-14
                    986: 
                    987: 
                    988:            context.  bind-pointer is the  size  of  variable
                    989:            binding  stack  when  this  evaluation began. The
                    990:            bind-pointer can be given as a second argument to
                    991:            _e_v_a_l  to  order to evaluate variables in the same
                    992:            context as this  evaluation. If  type  is  `eval'
                    993:            then  expression  will  have  the form (_f_u_n_c_t_i_o_n-
                    994:            _n_a_m_e _a_r_g_1 ...).  If type is `apply' then  expres-
                    995:            sion    will    have    the    form    (_f_u_n_c_t_i_o_n-
                    996:            _n_a_m_e (_a_r_g_1 ...)).  np-index  and  lbot-index  are
                    997:            pointers  into  the argument stack (also known as
                    998:            the _n_a_m_e_s_t_a_c_k array) at the time of call.   lbot-
                    999:            index  points  to  the  first  argument, np-index
                   1000:            points one beyond the last argument.
                   1001:            In order for there to be enough  information  for
                   1002:            _e_v_a_l_f_r_a_m_e to return, you must call (*_r_s_e_t _t).
                   1003: 
                   1004:      EXAMPLE: (_p_r_o_g_n (_e_v_a_l_f_r_a_m_e _n_i_l))
                   1005:               returns  (_e_v_a_l  _2_1_4_7_4_7_8_6_0_0  (_p_r_o_g_n  (_e_v_a_l_f_r_a_m_e
                   1006:               _n_i_l)) _1 _8 _7)
                   1007: 
                   1008: (evalhook 'g_form 'su_evalfunc ['su_funcallfunc])
                   1009: 
                   1010:      RETURNS: the result of evaluating g_form  after  lambda
                   1011:               binding  `evalhook'  to su_evalfunc and, if it
                   1012:               is  given,  lambda  binding  `funcallhook'  to
                   1013:               su_funcallhook.
                   1014: 
                   1015:      NOTE: As explained in 14.4, the function _e_v_a_l may  pass
                   1016:            the  job  of  evaluating  a form to a user `hook'
                   1017:            function when  various  switches  are  set.   The
                   1018:            hook  function  normally  prints  the  form to be
                   1019:            evaluated on the terminal and then  evaluates  it
                   1020:            by  calling  _e_v_a_l_h_o_o_k.   _E_v_a_l_h_o_o_k does the lambda
                   1021:            binding mentioned above and then  calls  _e_v_a_l  to
                   1022:            evaluate  the  form  after  setting  an  internal
                   1023:            switch to tell _e_v_a_l not to call the  user's  hook
                   1024:            function  just  this  one  time.  This allows the
                   1025:            evaluation process to advance one  step  and  yet
                   1026:            insure  that  further  calls  to  _e_v_a_l will cause
                   1027:            traps to the hook  function  (if  su_evalfunc  is
                   1028:            non-null).
                   1029:            In order for  _e_v_a_l_h_o_o_k  to  work,  (*_r_s_e_t _t)  and
                   1030:            (_s_s_t_a_t_u_s _e_v_a_l_h_o_o_k _t)  must  have been done previ-
                   1031:            ously.
                   1032: 
                   1033: 
                   1034: 
                   1035: 
                   1036: 
                   1037: 
                   1038: 
                   1039: 
                   1040: 9
                   1041: 
                   1042: 9                                   Printed: January 31, 1984
                   1043: 
                   1044: 
                   1045: 
                   1046: 
                   1047: 
                   1048: 
                   1049: 
                   1050: Special Functions                                       4-15
                   1051: 
                   1052: 
                   1053: (exec s_arg1 ...)
                   1054: 
                   1055:      RETURNS: the result of forking and executing  the  com-
                   1056:               mand   named   by   concatenating  the  s_arg_i
                   1057:               together with spaces in between.
                   1058: 
                   1059: (exece 's_fname ['l_args ['l_envir]])
                   1060: 
                   1061:      RETURNS: the error code  from  the  system  if  it  was
                   1062:               unable  to  execute  the  command s_fname with
                   1063:               arguments l_args and with the environment  set
                   1064:               up  as specified in l_envir.  If this function
                   1065:               is successful, it will not return, instead the
                   1066:               lisp  system  will be overlaid by the new com-
                   1067:               mand.
                   1068: 
                   1069: (freturn 'x_pdl-pointer 'g_retval)
                   1070: 
                   1071:      RETURNS: g_retval from  the  context  given  by  x_pdl-
                   1072:               pointer.
                   1073: 
                   1074:      NOTE: A  pdl-pointer  denotes  a   certain   expression
                   1075:            currently  being evaluated. The pdl-pointer for a
                   1076:            given expression can be obtained from _e_v_a_l_f_r_a_m_e.
                   1077: 
                   1078: (frexp 'f_arg)
                   1079: 
                   1080:      RETURNS: a  list  cell  (_e_x_p_o_n_e_n_t  .  _m_a_n_t_i_s_s_a)   which
                   1081:               represents the given flonum
                   1082: 
                   1083:      NOTE: The exponent will be a fixnum, the mantissa a  56
                   1084:            bit bignum.  If you think of the the binary point
                   1085:            occurring right  after  the  high  order  bit  of
                   1086:            mantissa, then f_arg = 2[exponent] * mantissa.
                   1087: 
                   1088: (funcall 'u_func ['g_arg1 ...])
                   1089: 
                   1090:      RETURNS: the value of applying function u_func  to  the
                   1091:               arguments  g_arg_i  and  then  evaluating  that
                   1092:               result if u_func is a macro.
                   1093: 
                   1094:      NOTE: If u_func is a macro or nlambda then there should
                   1095:            be only one g_arg.  _f_u_n_c_a_l_l is the function which
                   1096:            the evaluator uses to evaluate lists.  If _f_o_o  is
                   1097:            a    lambda    or    lexpr    or    array,   then
                   1098:            (_f_u_n_c_a_l_l '_f_o_o '_a '_b '_c)    is    equivalent    to
                   1099:            (_f_o_o '_a '_b '_c).    If   _f_o_o  is  a  nlambda  then
                   1100:            (_f_u_n_c_a_l_l '_f_o_o '(_a _b _c)) is equivalent to (_f_o_o _a _b
                   1101:            _c).    Finally,   if   _f_o_o   is   a   macro  then
                   1102:            (_f_u_n_c_a_l_l '_f_o_o '(_f_o_o _a _b _c))  is   equivalent   to
                   1103:            (_f_o_o _a _b _c).
                   1104: 
                   1105: 9
                   1106: 
                   1107: 9                                   Printed: January 31, 1984
                   1108: 
                   1109: 
                   1110: 
                   1111: 
                   1112: 
                   1113: 
                   1114: 
                   1115: Special Functions                                       4-16
                   1116: 
                   1117: 
                   1118: (funcallhook 'l_form 'su_funcallfunc ['su_evalfunc])
                   1119: 
                   1120:      RETURNS: the result of _f_u_n_c_a_l_ling the  (_c_a_r _l__f_o_r_m)  on
                   1121:               the   already   evaluated   arguments  in  the
                   1122:               (_c_d_r _l__f_o_r_m)  after   lambda   binding   `fun-
                   1123:               callhook'  to  su_funcallfunc  and,  if  it is
                   1124:               given,   lambda    binding    `evalhook'    to
                   1125:               su_evalhook.
                   1126: 
                   1127:      NOTE: This function is designed to continue the evalua-
                   1128:            tion  process  with  as  little  work as possible
                   1129:            after a funcallhook trap has occurred. It is  for
                   1130:            this  reason  that the form of l_form is unortho-
                   1131:            dox: its _c_a_r is the name of the function to  call
                   1132:            and  its  _c_d_r  are  a  list of arguments to stack
                   1133:            (without evaluating  again)  before  calling  the
                   1134:            given function.  After stacking the arguments but
                   1135:            before calling _f_u_n_c_a_l_l an internal switch is  set
                   1136:            to  prevent  _f_u_n_c_a_l_l from passing the job of fun-
                   1137:            calling to su_funcallfunc.  If _f_u_n_c_a_l_l is  called
                   1138:            recursively   in   funcalling   l_form   and   if
                   1139:            su_funcallfunc is non-null, then the arguments to
                   1140:            _f_u_n_c_a_l_l  will actually be given to su_funcallfunc
                   1141:            (a lexpr) to be funcalled.
                   1142:            In order for  _e_v_a_l_h_o_o_k  to  work,  (*_r_s_e_t _t)  and
                   1143:            (_s_s_t_a_t_u_s _e_v_a_l_h_o_o_k _t)  must  have been done previ-
                   1144:            ously.  A more detailed description  of  _e_v_a_l_h_o_o_k
                   1145:            and _f_u_n_c_a_l_l_h_o_o_k is given in Chapter 14.
                   1146: 
                   1147: (function u_func)
                   1148: 
                   1149:      RETURNS: the function binding of u_func  if  it  is  an
                   1150:               symbol   with  a  function  binding  otherwise
                   1151:               u_func is returned.
                   1152: 
                   1153: (getdisc 'y_func)
                   1154: 
                   1155:      RETURNS: the discipline of the machine  coded  function
                   1156:               (either lambda, nlambda or macro).
                   1157: 
                   1158: (go g_labexp)
                   1159: 
                   1160:      WHERE:   g_labexp is either a symbol or an expression.
                   1161: 
                   1162:      SIDE EFFECT: If g_labexp is an expression, that expres-
                   1163:                   sion  is  evaluated and should result in a
                   1164:                   symbol.  The locus  of  control  moves  to
                   1165:                   just  following the symbol g_labexp in the
                   1166:                   current prog or do body.
                   1167: 
                   1168:      NOTE: this is only valid in the context of a prog or do
                   1169:            body.   The  interpreter  and compiler will allow
                   1170:            non-local _g_o's although the compiler won't  allow
                   1171: 
                   1172: 
                   1173:                                    Printed: January 31, 1984
                   1174: 
                   1175: 
                   1176: 
                   1177: 
                   1178: 
                   1179: 
                   1180: 
                   1181: Special Functions                                       4-17
                   1182: 
                   1183: 
                   1184:            a _g_o to leave a function body.  The compiler will
                   1185:            not allow g_labexp to be an expression.
                   1186: 
                   1187: (if 'g_a 'g_b)
                   1188: (if 'g_a 'g_b 'g_c ...)
                   1189: (if 'g_a then  'g_b [...] [elseif 'g_c then 'g_d ...]  [else
                   1190: 'g_e [...])
                   1191: (if 'g_a then  'g_b [...] [elseif 'g_c thenret]  [else  'g_d
                   1192: [...])
                   1193: 
                   1194:      NOTE: The various forms of _i_f are intended to be a more
                   1195:            readable  conditional  statement,  to  be used in
                   1196:            place of _c_o_n_d.  There are two  varieties  of  _i_f,
                   1197:            with  keywords,  and  without.   The keyword-less
                   1198:            variety is inherited from common  Maclisp  usage.
                   1199:            A  keyword-less, two argument _i_f is equivalent to
                   1200:            a one-clause _c_o_n_d, i.e. (_c_o_n_d (a b)).   Any other
                   1201:            keyword-less  _i_f  must  have at least three argu-
                   1202:            ments.  The first two  arguments  are  the  first
                   1203:            clause  of the equivalent _c_o_n_d, and all remaining
                   1204:            arguments are shoved into a second clause  begin-
                   1205:            ning  with  t.   Thus,  the  second form of _i_f is
                   1206:            equivalent to
                   1207:                    (_c_o_n_d (a b) (t c ...)).
                   1208: 
                   1209:            The keyword variety has the following grouping of
                   1210:            arguments:   a   predicate,  a  then-clause,  and
                   1211:            optional   else-clause.    The    predicate    is
                   1212:            evaluated,  and  if  the  result  is non-nil, the
                   1213:            then-clause  will  be  performed,  in  the  sense
                   1214:            described  below.  Otherwise, (i.e. the result of
                   1215:            the predicate evaluation was precisely nil),  the
                   1216:            else-clause will be performed.
                   1217: 
                   1218:            Then-clauses will either consist entirely of  the
                   1219:            single  keyword  thenret,  or will start with the
                   1220:            keyword then, and be followed  by  at  least  one
                   1221:            general  expression.   (These general expressions
                   1222:            must not be one of the keywords.)  To  actuate  a
                   1223:            thenret  means to cease further evaluation of the
                   1224:            _i_f, and to return the value of the predicate just
                   1225:            calculated.  The performance of the longer clause
                   1226:            means to  evaluate  each  general  expression  in
                   1227:            turn, and then return the last value calculated.
                   1228: 
                   1229:            The else-clause may begin with the  keyword  else
                   1230:            and  be  followed by at least one general expres-
                   1231:            sion.  The rendition of this clause is just  like
                   1232:            that  of a then-clause.  An else-clause may begin
                   1233:            alternatively with the  keyword  elseif,  and  be
                   1234:            followed  (recursively)  by  a  predicate,  then-
                   1235:            clause, and optional else-clause.  Evaluation  of
                   1236:            this  clause,  is  just evaluation of an _i_f-form,
                   1237: 
                   1238: 
                   1239:                                    Printed: January 31, 1984
                   1240: 
                   1241: 
                   1242: 
                   1243: 
                   1244: 
                   1245: 
                   1246: 
                   1247: Special Functions                                       4-18
                   1248: 
                   1249: 
                   1250:            with the same predicate, then- and else-clauses.
                   1251: 
                   1252: (I-throw-err 'l_token)
                   1253: 
                   1254:      WHERE:   l_token is the _c_d_r of the value returned  from
                   1255:               a *_c_a_t_c_h with the tag ER%unwind-protect.
                   1256: 
                   1257:      RETURNS: nothing (never returns in the current context)
                   1258: 
                   1259:      SIDE EFFECT: The error or throw denoted by  l_token  is
                   1260:                   continued.
                   1261: 
                   1262:      NOTE: This function is used to implement _u_n_w_i_n_d-_p_r_o_t_e_c_t
                   1263:            which allows the processing of a transfer of con-
                   1264:            trol though a certain context to be  interrupted,
                   1265:            a  user  function  to  be  executed  and than the
                   1266:            transfer of control to  continue.   The  form  of
                   1267:            l_token is either
                   1268:            (_t _t_a_g _v_a_l_u_e) for a throw or
                   1269:            (_n_i_l _t_y_p_e _m_e_s_s_a_g_e _v_a_l_r_e_t  _c_o_n_t_u_a_b  _u_n_i_q_u_e_i_d  [_a_r_g
                   1270:            ...]) for an error.
                   1271:            This function is not to be used for  implementing
                   1272:            throws  or errors and is only documented here for
                   1273:            completeness.
                   1274: 
                   1275: (let l_args g_exp1 ... g_exprn)
                   1276: 
                   1277:      RETURNS: the result of evaluating  g_exprn  within  the
                   1278:               bindings given by l_args.
                   1279: 
                   1280:      NOTE: l_args is either nil (in which case _l_e_t  is  just
                   1281:            like  _p_r_o_g_n)  or it is a list of binding objects.
                   1282:            A binding object is a  list  (_s_y_m_b_o_l _e_x_p_r_e_s_s_i_o_n).
                   1283:            When a _l_e_t is entered, all of the expressions are
                   1284:            evaluated and then simultaneously lambda-bound to
                   1285:            the  corresponding  symbols.   In  effect,  a _l_e_t
                   1286:            expression  is  just  like  a  lambda  expression
                   1287:            except  the  symbols and their initial values are
                   1288:            next to each other, making the expression  easier
                   1289:            to  understand.  There are some added features to
                   1290:            the _l_e_t expression: A binding object can just  be
                   1291:            a   symbol,   in   which   case   the  expression
                   1292:            corresponding to that  symbol  is  `nil'.   If  a
                   1293:            binding object is a list and the first element of
                   1294:            that list is another  list,  then  that  list  is
                   1295:            assumed  to be a binding template and _l_e_t will do
                   1296:            a _d_e_s_e_t_q on it.
                   1297: 
                   1298: 
                   1299: 
                   1300: 
                   1301: 
                   1302: 9
                   1303: 
                   1304: 9                                   Printed: January 31, 1984
                   1305: 
                   1306: 
                   1307: 
                   1308: 
                   1309: 
                   1310: 
                   1311: 
                   1312: Special Functions                                       4-19
                   1313: 
                   1314: 
                   1315: (let* l_args g_exp1 ... g_expn)
                   1316: 
                   1317:      RETURNS: the result of evaluating  g_exprn  within  the
                   1318:               bindings given by l_args.
                   1319: 
                   1320:      NOTE: This is identical to _l_e_t except  the  expressions
                   1321:            in  the  binding  list  l_args  are evaluated and
                   1322:            bound sequentially instead of in parallel.
                   1323: 
                   1324: (lexpr-funcall 'g_function ['g_arg1 ...] 'l_argn)
                   1325: 
                   1326:      NOTE: This is a cross between funcall and  apply.   The
                   1327:            last  argument,  must be a list (possibly empty).
                   1328:            The element of list arg are stack  and  then  the
                   1329:            function is funcalled.
                   1330: 
                   1331:      EXAMPLE: (lexpr-funcall 'list 'a '(b c d)) is the  same
                   1332:               as
                   1333:                (funcall 'list 'a 'b 'c 'd)
                   1334: 
                   1335: (listify 'x_count)
                   1336: 
                   1337:      RETURNS: a list of x_count  of  the  arguments  to  the
                   1338:               current function (which must be a lexpr).
                   1339: 
                   1340:      NOTE: normally  arguments   1   through   x_count   are
                   1341:            returned.  If x_count is negative then  a list of
                   1342:            last abs(x_count) arguments are returned.
                   1343: 
                   1344: (map 'u_func 'l_arg1 ...)
                   1345: 
                   1346:      RETURNS: l_arg1
                   1347: 
                   1348:      NOTE: The function u_func is applied to successive sub-
                   1349:            lists  of  the  l_arg_i.  All sublists should have
                   1350:            the same length.
                   1351: 
                   1352: (mapc 'u_func 'l_arg1 ...)
                   1353: 
                   1354:      RETURNS: l_arg1.
                   1355: 
                   1356:      NOTE: The function u_func is applied to successive ele-
                   1357:            ments  of  the  argument lists.  All of the lists
                   1358:            should have the same length.
                   1359: 
                   1360: 
                   1361: 
                   1362: 
                   1363: 
                   1364: 
                   1365: 
                   1366: 
                   1367: 9
                   1368: 
                   1369: 9                                   Printed: January 31, 1984
                   1370: 
                   1371: 
                   1372: 
                   1373: 
                   1374: 
                   1375: 
                   1376: 
                   1377: Special Functions                                       4-20
                   1378: 
                   1379: 
                   1380: (mapcan 'u_func 'l_arg1 ...)
                   1381: 
                   1382:      RETURNS: nconc applied to the results of the functional
                   1383:               evaluations.
                   1384: 
                   1385:      NOTE: The function u_func is applied to successive ele-
                   1386:            ments of the argument lists.  All sublists should
                   1387:            have the same length.
                   1388: 
                   1389: (mapcar 'u_func 'l_arg1 ...)
                   1390: 
                   1391:      RETURNS: a list of the values returned from  the  func-
                   1392:               tional application.
                   1393: 
                   1394:      NOTE: the function u_func is applied to successive ele-
                   1395:            ments of the argument lists.  All sublists should
                   1396:            have the same length.
                   1397: 
                   1398: (mapcon 'u_func 'l_arg1 ...)
                   1399: 
                   1400:      RETURNS: nconc applied to the results of the functional
                   1401:               evaluation.
                   1402: 
                   1403:      NOTE: the function u_func is applied to successive sub-
                   1404:            lists of the argument lists.  All sublists should
                   1405:            have the same length.
                   1406: 
                   1407: (maplist 'u_func 'l_arg1 ...)
                   1408: 
                   1409:      RETURNS: a  list  of  the  results  of  the  functional
                   1410:               evaluations.
                   1411: 
                   1412:      NOTE: the function u_func is applied to successive sub-
                   1413:            lists  of  the  arguments  lists.   All  sublists
                   1414:            should have the same length.
                   1415: 
                   1416:      Readers may find the following summary table useful  in
                   1417:      remembering  the  differences  between  the six mapping
                   1418:      functions:
                   1419: 
                   1420: 
                   1421: 8     ________________________________________________________________
                   1422:                                       Value returned is
                   1423: 
                   1424:                          l_arg1   list of results   _n_c_o_n_c of results
                   1425: 7       Argument to
                   1426:        functional is
                   1427: 8    ________________________________________________________________
                   1428: 
                   1429:      elements of list    mapc        mapcar             mapcan
                   1430: 
                   1431:          sublists        map         maplist            mapcon
                   1432: 8    ________________________________________________________________
                   1433: 7   |7|7|7|7|7|7|7|7|
                   1434: 
                   1435: 
                   1436: 
                   1437: 
                   1438: 
                   1439: 
                   1440: 
                   1441:                      |7|7|7|7|7|7|7|7|
                   1442: 
                   1443: 
                   1444: 
                   1445: 
                   1446: 
                   1447: 
                   1448: 
                   1449:                                                                    |7|7|7|7|7|7|7|7|
                   1450: 
                   1451: 
                   1452: 
                   1453: 
                   1454: 
                   1455: 
                   1456: 
                   1457: 
                   1458: 
                   1459: 
                   1460: 
                   1461: 
                   1462: 9                                   Printed: January 31, 1984
                   1463: 
                   1464: 
                   1465: 
                   1466: 
                   1467: 
                   1468: 
                   1469: 
                   1470: Special Functions                                       4-21
                   1471: 
                   1472: 
                   1473: (mfunction t_entry 's_disc)
                   1474: 
                   1475:      RETURNS: a lisp  object  of  type  binary  composed  of
                   1476:               t_entry and s_disc.
                   1477: 
                   1478:      NOTE: t_entry is a pointer to the machine  code  for  a
                   1479:            function,  and  s_disc  is  the  discipline (e.g.
                   1480:            lambda).
                   1481: 
                   1482: (oblist)
                   1483: 
                   1484:      RETURNS: a list of all symbols on the oblist.
                   1485: 
                   1486: (or [g_arg1 ... ])
                   1487: 
                   1488:      RETURNS: the value of the first non-null  argument   or
                   1489:               nil if all arguments evaluate to nil.
                   1490: 
                   1491:      NOTE: Evaluation proceeds left to right  and  stops  as
                   1492:            soon  as one of the arguments evaluates to a non-
                   1493:            null value.
                   1494: 
                   1495: (prog l_vrbls g_exp1 ...)
                   1496: 
                   1497:      RETURNS: the value explicitly given in a return form or
                   1498:               else  nil if no return is done by the time the
                   1499:               last g_exp_i is evaluated.
                   1500: 
                   1501:      NOTE: the local variables are lambda-bound to nil, then
                   1502:            the  g_exp_i  are  evaluated  from  left to right.
                   1503:            This is a prog body (obviously)  and  this  means
                   1504:            than  any symbols seen are not evaluated, but are
                   1505:            treated as labels.  This also means that return's
                   1506:            and go's are allowed.
                   1507: 
                   1508: (prog1 'g_exp1 ['g_exp2 ...])
                   1509: 
                   1510:      RETURNS: g_exp1
                   1511: 
                   1512: (prog2 'g_exp1 'g_exp2 ['g_exp3 ...])
                   1513: 
                   1514:      RETURNS: g_exp2
                   1515: 
                   1516:      NOTE: the forms are evaluated from left  to  right  and
                   1517:            the value of g_exp2 is returned.
                   1518: 
                   1519: 
                   1520: 
                   1521: 
                   1522: 
                   1523: 
                   1524: 
                   1525: 9
                   1526: 
                   1527: 9                                   Printed: January 31, 1984
                   1528: 
                   1529: 
                   1530: 
                   1531: 
                   1532: 
                   1533: 
                   1534: 
                   1535: Special Functions                                       4-22
                   1536: 
                   1537: 
                   1538: (progn 'g_exp1 ['g_exp2 ...])
                   1539: 
                   1540:      RETURNS: the last g_exp_i.
                   1541: 
                   1542: (progv 'l_locv 'l_initv g_exp1 ...)
                   1543: 
                   1544:      WHERE:   l_locv is a list of symbols and l_initv  is  a
                   1545:               list of expressions.
                   1546: 
                   1547:      RETURNS: the value of the last g_exp_i evaluated.
                   1548: 
                   1549:      NOTE: The expressions in  l_initv  are  evaluated  from
                   1550:            left  to  right and then lambda-bound to the sym-
                   1551:            bols in l_locv.  If there are too few expressions
                   1552:            in l_initv then the missing values are assumed to
                   1553:            be nil.  If there are  too  many  expressions  in
                   1554:            l_initv then the extra ones are ignored (although
                   1555:            they  are  evaluated).   Then  the   g_exp_i   are
                   1556:            evaluated  left to right.  The body of a progv is
                   1557:            like the body of a progn, it is _n_o_t a prog  body.
                   1558:            (C.f. _l_e_t)
                   1559: 
                   1560: (purcopy 'g_exp)
                   1561: 
                   1562:      RETURNS: a copy of g_exp with new pure cells  allocated
                   1563:               wherever possible.
                   1564: 
                   1565:      NOTE: pure space is never swept up by the garbage  col-
                   1566:            lector,  so  this  should only be done on expres-
                   1567:            sions which are not likely to become  garbage  in
                   1568:            the  future.   In  certain cases, data objects in
                   1569:            pure space become read-only after a _d_u_m_p_l_i_s_p  and
                   1570:            then  an attempt to modify the object will result
                   1571:            in an illegal memory reference.
                   1572: 
                   1573: (purep 'g_exp)
                   1574: 
                   1575:      RETURNS: t iff the object g_exp is in pure space.
                   1576: 
                   1577: (putd 's_name 'u_func)
                   1578: 
                   1579:      RETURNS: u_func
                   1580: 
                   1581:      SIDE EFFECT: this sets the function binding  of  symbol
                   1582:                   s_name to u_func.
                   1583: 
                   1584: 
                   1585: 
                   1586: 
                   1587: 
                   1588: 
                   1589: 
                   1590: 9
                   1591: 
                   1592: 9                                   Printed: January 31, 1984
                   1593: 
                   1594: 
                   1595: 
                   1596: 
                   1597: 
                   1598: 
                   1599: 
                   1600: Special Functions                                       4-23
                   1601: 
                   1602: 
                   1603: (return ['g_val])
                   1604: 
                   1605:      RETURNS: g_val (or nil if g_val is  not  present)  from
                   1606:               the enclosing prog or do body.
                   1607: 
                   1608:      NOTE: this form is only valid in the context of a  prog
                   1609:            or do body.
                   1610: 
                   1611: (selectq 'g_key-form [l_clause1 ...])
                   1612: 
                   1613:      NOTE: This function is just  like  _c_a_s_e_q  (see  above),
                   1614:            except  that  the  symbol  otherwise has the same
                   1615:            semantics as the symbol t, when used  as  a  com-
                   1616:            parator.
                   1617: 
                   1618: (setarg 'x_argnum 'g_val)
                   1619: 
                   1620:      WHERE:   x_argnum is greater than zero and less than or
                   1621:               equal to the number of arguments to the lexpr.
                   1622: 
                   1623:      RETURNS: g_val
                   1624: 
                   1625:      SIDE EFFECT: the lexpr's x_argnum'th argument is set to
                   1626:                   g-val.
                   1627: 
                   1628:      NOTE: this can only be used within the body of a lexpr.
                   1629: 
                   1630: (throw 'g_val [s_tag])
                   1631: 
                   1632:      WHERE:   if s_tag is not given, it  is  assumed  to  be
                   1633:               nil.
                   1634: 
                   1635:      RETURNS: the value of (*_t_h_r_o_w '_s__t_a_g '_g__v_a_l).
                   1636: 
                   1637: (*throw 's_tag 'g_val)
                   1638: 
                   1639:      RETURNS: g_val from the first enclosing catch with  the
                   1640:               tag s_tag or with no tag at all.
                   1641: 
                   1642:      NOTE: this is used in conjunction with *_c_a_t_c_h to  cause
                   1643:            a clean jump to an enclosing context.
                   1644: 
                   1645: 
                   1646: 
                   1647: 
                   1648: 
                   1649: 
                   1650: 
                   1651: 
                   1652: 
                   1653: 
                   1654: 
                   1655: 9
                   1656: 
                   1657: 9                                   Printed: January 31, 1984
                   1658: 
                   1659: 
                   1660: 
                   1661: 
                   1662: 
                   1663: 
                   1664: 
                   1665: Special Functions                                       4-24
                   1666: 
                   1667: 
                   1668: (unwind-protect g_protected [g_cleanup1 ...])
                   1669: 
                   1670:      RETURNS: the result of evaluating g_protected.
                   1671: 
                   1672:      NOTE: Normally g_protected is evaluated and  its  value
                   1673:            remembered, then the g_cleanup_i are evaluated and
                   1674:            finally  the  saved  value  of   g_protected   is
                   1675:            returned.    If   something  should  happen  when
                   1676:            evaluating g_protected which  causes  control  to
                   1677:            pass  through  g_protected   and thus through the
                   1678:            call to the unwind-protect, then  the  g_cleanup_i
                   1679:            will  still  be  evaluated.   This  is  useful if
                   1680:            g_protected does  something sensitive which  must
                   1681:            be  cleaned  up  whether  or not g_protected com-
                   1682:            pletes.
                   1683: 
                   1684: 
                   1685: 
                   1686: 
                   1687: 
                   1688: 
                   1689: 
                   1690: 
                   1691: 
                   1692: 
                   1693: 
                   1694: 
                   1695: 
                   1696: 
                   1697: 
                   1698: 
                   1699: 
                   1700: 
                   1701: 
                   1702: 
                   1703: 
                   1704: 
                   1705: 
                   1706: 
                   1707: 
                   1708: 
                   1709: 
                   1710: 
                   1711: 
                   1712: 
                   1713: 
                   1714: 
                   1715: 
                   1716: 
                   1717: 
                   1718: 
                   1719: 
                   1720: 9
                   1721: 
                   1722: 9                                   Printed: January 31, 1984
                   1723: 
                   1724: 
                   1725: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.