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

1.1       root        1: 
                      2: 
                      3: 
                      4: 
                      5: 
                      6: 
                      7: 
                      8:                          CHAPTER  1
                      9: 
                     10: 
                     11:                          FRANZ LISP
                     12: 
                     13: 
                     14: 
                     15: 
                     16: 
                     17: 
                     18:    1.1.  FRANZ LISP[|-] was created  as  a  tool  to  further
                     19:       research   in  symbolic  and  algebraic  manipulation,
                     20:       artificial intelligence, and programming languages  at
                     21:       the University of California at Berkeley.   Its  roots
                     22:       are in a PDP-11 Lisp system which originally came from
                     23:       Harvard.  As it grew it adopted  features  of  Maclisp
                     24:       and Lisp Machine Lisp.  Substantial compatibility with
                     25:       other Lisp dialects (Interlisp, UCILisp,  CMULisp)  is
                     26:       achieved  by  means  of  support packages and compiler
                     27:       switches.  The heart of FRANZ LISP is  written  almost
                     28:       entirely in the programming language C.  Of course, it
                     29:       has been greatly  extended  by  additions  written  in
                     30:       Lisp.   A  small  part  is  written  in  the  assembly
                     31:       language for the current host machines,  VAXen  and  a
                     32:       couple  of  flavors  of  68000.  Because FRANZ LISP is
                     33:       written in C, it is relatively portable  and  easy  to
                     34:       comprehend.
                     35: 
                     36:            FRANZ LISP is capable of running large lisp  pro-
                     37:       grams in a timesharing environment, has facilities for
                     38:       arrays and user defined structures, has  a  user  con-
                     39:       trolled reader with character and word macro  capabil-
                     40:       ities, and can interact directly with  compiled  Lisp,
                     41:       C, Fortran, and Pascal code.
                     42: 
                     43:            This document is a reference manual for the FRANZ
                     44:       LISP  system.  It is not a Lisp primer or introduction
                     45:       to the language.  Some parts will be of interest  pri-
                     46:       marily  to  those maintaining FRANZ LISP at their com-
                     47:       puter site.  There is an additional document  entitled
                     48:       _T_h_e  _F_r_a_n_z  _L_i_s_p  _S_y_s_t_e_m, _b_y _J_o_h_n _F_o_d_e_r_a_r_o, _w_h_i_c_h _p_a_r_-
                     49:       _t_i_a_l_l_y _d_e_s_c_r_i_b_e_s  _t_h_e  _s_y_s_t_e_m  _i_m_p_l_e_m_e_n_t_a_t_i_o_n.   _F_R_A_N_Z
                     50:       _L_I_S_P,  _a_s  _d_e_l_i_v_e_r_e_d  _b_y _B_e_r_k_e_l_e_y, _i_n_c_l_u_d_e_s _a_l_l _s_o_u_r_c_e
                     51:       _c_o_d_e _a_n_d _m_a_c_h_i_n_e _r_e_a_d_a_b_l_e _v_e_r_s_i_o_n _o_f _t_h_i_s  _m_a_n_u_a_l  _a_n_d
                     52:       _s_y_s_t_e_m  _d_o_c_u_m_e_n_t.   _T_h_e _s_y_s_t_e_m _d_o_c_u_m_e_n_t _i_s _i_n _a _s_i_n_g_l_e
                     53:       _f_i_l_e _n_a_m_e_d "_f_r_a_n_z._n" _i_n _t_h_e "_d_o_c" _s_u_b_d_i_r_e_c_t_o_r_y.
                     54: ____________________
                     55: 9   [|-]It is rumored that this name has something to do  with
                     56: Franz  Liszt  [F_rants List] (1811-1886) a Hungarian composer
                     57: and keyboard virtuoso. These  allegations  have  never  been
                     58: proven.
                     59: 
                     60: 
                     61: 
                     62: 9FRANZ LISP                                               1-1
                     63: 
                     64: 
                     65: 
                     66: 
                     67: 
                     68: 
                     69: 
                     70: FRANZ LISP                                               1-2
                     71: 
                     72: 
                     73:            This document is divided into four Movements.  In
                     74:       the first one we will attempt to describe the language
                     75:       of FRANZ LISP  precisely  and  completely  as  it  now
                     76:       stands  (Opus  38.69, June 1983).  In the second Move-
                     77:       ment we will  look  at  the  reader,  function  types,
                     78:       arrays  and exception handling.  In the third Movement
                     79:       we will look at several large support packages written
                     80:       to help the FRANZ LISP user, namely the trace package,
                     81:       compiler, fixit and  stepping  package.   Finally  the
                     82:       fourth  movement  contains   an  index  into the other
                     83:       movements.  In the rest of this chapter we shall exam-
                     84:       ine  the  data  types  of FRANZ LISP.  The conventions
                     85:       used in the description of the  FRANZ  LISP  functions
                     86:       will  be  given  in  1.3  -- it is very important that
                     87:       these conventions are  understood.
                     88: 
                     89: 
                     90: 
                     91:    1.2.  Data Types   FRANZ LISP has  fourteen  data  types.
                     92:       In  this  section we shall look in detail at each type
                     93:       and if a type is divisible we shall  look  inside  it.
                     94:       There  is  a  Lisp function _t_y_p_e which will return the
                     95:       type name of a lisp  object.   This  is  the  official
                     96:       FRANZ  LISP  name  for  that type and we will use this
                     97:       name and this name only in the manual to avoid confus-
                     98:       ing  the  reader.   The  types  are listed in terms of
                     99:       importance rather than alphabetically.
                    100: 
                    101: 
                    102: 
                    103:       1.2.0.  lispval   This is the name we use to  describe
                    104:          any  Lisp  object.   The  function  _t_y_p_e will never
                    105:          return `lispval'.
                    106: 
                    107: 
                    108: 
                    109:       1.2.1.  symbol   This object corresponds to a variable
                    110:          in most other programming languages.  It may have a
                    111:          value or may be `unbound'.  A symbol may be  _l_a_m_b_d_a
                    112:          _b_o_u_n_d meaning that its current value is stored away
                    113:          somewhere and the symbol  is given a new value  for
                    114:          the  duration  of a certain context.  When the Lisp
                    115:          processor   leaves  that  context,   the   symbol's
                    116:          current  value  is thrown away and its old value is
                    117:          restored.
                    118: 9         A symbol may also have a  _f_u_n_c_t_i_o_n  _b_i_n_d_i_n_g.   This
                    119:          function  binding  is  static;  it cannot be lambda
                    120:          bound.  Whenever the symbol is used  in  the  func-
                    121:          tional  position  of a Lisp expression the function
                    122:          binding of the symbol is examined  (see  Chapter  4
                    123:          for more details on  evaluation).
                    124: 9         A symbol may also have  a  _p_r_o_p_e_r_t_y  _l_i_s_t,  another
                    125: 
                    126: 
                    127:                                    Printed: January 31, 1984
                    128: 
                    129: 
                    130: 
                    131: 
                    132: 
                    133: 
                    134: 
                    135: FRANZ LISP                                               1-3
                    136: 
                    137: 
                    138:          static  data structure.  The property list consists
                    139:          of a list of an even number of elements, considered
                    140:          to  be  grouped  as pairs. The first element of the
                    141:          pair is the _i_n_d_i_c_a_t_o_r the second the _v_a_l_u_e of  that
                    142:          indicator.
                    143: 9         Each symbol has a print name (_p_n_a_m_e) which  is  how
                    144:          this  symbol is accessed from input and referred to
                    145:          on  (printed) output.
                    146: 9         A symbol also has a hashlink used to  link  symbols
                    147:          together  in the oblist -- this field is inaccessi-
                    148:          ble to the lisp user.
                    149: 9         Symbols are created by the reader and by the  func-
                    150:          tions  _c_o_n_c_a_t,  _m_a_k_n_a_m and their derivatives.  Most
                    151:          symbols live  on  FRANZ  LISP's  sole  _o_b_l_i_s_t,  and
                    152:          therefore  two symbols with the same print name are
                    153:          usually the  exact same object (they are _e_q).  Sym-
                    154:          bols  which  are  not  on the oblist are said to be
                    155:          _u_n_i_n_t_e_r_n_e_d.  The function _m_a_k_n_a_m creates uninterned
                    156:          symbols while _c_o_n_c_a_t creates _i_n_t_e_r_n_e_d ones.
                    157: 
                    158: 
                    159: 8    ____________________________________________________________
                    160:      Subpart name   Get value   Set value          Type
                    161: 
                    162: 8    ________________________________________________________________________________________________________________________
                    163:         value         eval         set            lispval
                    164:                                   setq
                    165: 8    ____________________________________________________________
                    166:        property       plist     setplist        list or nil
                    167:          list          get       putprop
                    168:                                  defprop
                    169: 8    ____________________________________________________________
                    170:        function       getd        putd      array, binary, list
                    171:        binding                     def            or nil
                    172: 8    ____________________________________________________________
                    173:       print name    get_pname                     string
                    174: 8    ____________________________________________________________
                    175:       hash link
                    176: 8    ____________________________________________________________
                    177: 7   |7|7|7|7|7|7|7|7|7|7|7|7|7|
                    178: 
                    179: 
                    180: 
                    181: 
                    182: 
                    183: 
                    184: 
                    185: 
                    186: 
                    187: 
                    188: 
                    189: 
                    190:                  |7|7|7|7|7|7|7|7|7|7|7|7|7|
                    191: 
                    192: 
                    193: 
                    194: 
                    195: 
                    196: 
                    197: 
                    198: 
                    199: 
                    200: 
                    201: 
                    202: 
                    203:                              |7|7|7|7|7|7|7|7|7|7|7|7|7|
                    204: 
                    205: 
                    206: 
                    207: 
                    208: 
                    209: 
                    210: 
                    211: 
                    212: 
                    213: 
                    214: 
                    215: 
                    216:                                          |7|7|7|7|7|7|7|7|7|7|7|7|7|
                    217: 
                    218: 
                    219: 
                    220: 
                    221: 
                    222: 
                    223: 
                    224: 
                    225: 
                    226: 
                    227: 
                    228: 
                    229:                                                                |7|7|7|7|7|7|7|7|7|7|7|7|7|
                    230: 
                    231: 
                    232: 
                    233: 
                    234: 
                    235: 
                    236: 
                    237: 
                    238: 
                    239: 
                    240: 
                    241: 
                    242: 
                    243: 
                    244: 
                    245: 
                    246: 
                    247:       1.2.2.  list   A list cell has two parts,  called  the
                    248:          car  and  cdr.  List cells are created by the func-
                    249:          tion _c_o_n_s.
                    250: 
                    251: 
                    252: 8          ________________________________________________
                    253:            Subpart name   Get value   Set value    Type
                    254: 
                    255: 8          ________________________________________________________________________________________________
                    256:                car           car       rplaca     lispval
                    257: 8          ________________________________________________
                    258:                cdr           cdr       rplacd     lispval
                    259: 
                    260: 
                    261: 
                    262: 9                                   Printed: January 31, 1984
                    263: 
                    264: 
                    265: 
                    266: 
                    267: 
                    268: 
                    269: 
                    270: FRANZ LISP                                               1-4
                    271: 
                    272: 
                    273: 8          ________________________________________________
                    274: 799         |99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|
                    275: 7777777777777777777777777777777777777777777777799                       |99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|
                    276: 7777777777777777777777777777777777777777777777799                                   |99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|
                    277: 7777777777777777777777777777777777777777777777799                                               |99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|
                    278: 7777777777777777777777777777777777777777777777799                                                         |99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|
                    279: 777777777777777777777777777777777777777777777
                    280: 
                    281: 
                    282:       1.2.3.  binary   This type acts as a  function  header
                    283:          for  machine  coded functions.  It has two parts, a
                    284:          pointer to the start of the function and  a  symbol
                    285:          whose print name describes the argument _d_i_s_c_i_p_l_i_n_e.
                    286:          The discipline (if _l_a_m_b_d_a, _m_a_c_r_o or _n_l_a_m_b_d_a) deter-
                    287:          mines  whether  the arguments to this function will
                    288:          be evaluated by the caller before this function  is
                    289:          called.   If  the  discipline is a string (specifi-
                    290:          cally "_s_u_b_r_o_u_t_i_n_e", "_f_u_n_c_t_i_o_n", "_i_n_t_e_g_e_r-_f_u_n_c_t_i_o_n",
                    291:          "_r_e_a_l-_f_u_n_c_t_i_o_n", "_c-_f_u_n_c_t_i_o_n", "_d_o_u_b_l_e-_c-_f_u_n_c_t_i_o_n",
                    292:          or "_v_e_c_t_o_r-_c-_f_u_n_c_t_i_o_n" ) then this  function  is  a
                    293:          foreign  subroutine  or  function (see 8.5 for more
                    294:          details on this).  Although the type of  the  _e_n_t_r_y
                    295:          field  of a binary type object is usually string or
                    296:          other, the object pointed to is actually a sequence
                    297:          of machine instructions.
                    298:          Objects of type binary are  created  by  _m_f_u_n_c_t_i_o_n,
                    299:          _c_f_a_s_l, and _g_e_t_a_d_d_r_e_s_s.
                    300: 
                    301: 
                    302: 8      _________________________________________________________
                    303:        Subpart name   Get value   Set value         Type
                    304: 
                    305: 8      __________________________________________________________________________________________________________________
                    306:           entry       getentry                string or fixnum
                    307: 8      _________________________________________________________
                    308:         discipline     getdisc     putdisc    symbol or fixnum
                    309: 8      _________________________________________________________
                    310: 7     |8|7|7|7|7|
                    311: 
                    312: 
                    313: 
                    314: 9                   |8|7|7|7|7|
                    315: 
                    316: 
                    317: 
                    318: 9                               |8|7|7|7|7|
                    319: 
                    320: 
                    321: 
                    322: 9                                           |8|7|7|7|7|
                    323: 
                    324: 
                    325: 
                    326: 9                                                              |8|7|7|7|7|
                    327: 
                    328: 
                    329: 
                    330: 
                    331: 
                    332: 9
                    333: 
                    334: 
                    335:       1.2.4.  fixnum   A fixnum is an  integer  constant  in
                    336:          the  range -2[31] to 2[31]-1.  Small fixnums (-1024
                    337:          to 1023) are stored in  a  special  table  so  they
                    338:          needn't  be  allocated each time one is needed.  In
                    339:          principle, the range for fixnums is machine  depen-
                    340:          dent,  although  all  current  implementations  for
                    341:          franz have this range.
                    342: 
                    343: 
                    344: 
                    345:       1.2.5.  flonum   A flonum is a double  precision  real
                    346:          number.  On  the  VAX, the range is +_2.9x10[-37] to
                    347:          +_1.7x10[38].   There  are   approximately   sixteen
                    348:          decimal  digits  of  precision.  Other machines may
                    349:          have other ranges.
                    350: 
                    351: 
                    352: 
                    353: 
                    354: 
                    355: 9                                   Printed: January 31, 1984
                    356: 
                    357: 
                    358: 
                    359: 
                    360: 
                    361: 
                    362: 
                    363: FRANZ LISP                                               1-5
                    364: 
                    365: 
                    366:       1.2.6.  bignum   A bignum is an integer of potentially
                    367:          unbounded  size.   When  integer arithmetic exceeds
                    368:          the limits of fixnums mentioned above, the calcula-
                    369:          tion  is  automatically  done with bignums.  Should
                    370:          calculation with bignums give a result which can be
                    371:          represented  as a fixnum, then the fixnum represen-
                    372:          tation will be used[|-].  This contraction is  known
                    373:          as  _i_n_t_e_g_e_r  _n_o_r_m_a_l_i_z_a_t_i_o_n.   Many  Lisp  functions
                    374:          assume that integers are normalized.   Bignums  are
                    375:          composed  of  a  sequence  of list cells and a cell
                    376:          known as an sdot.  The user should consider a  big-
                    377:          num structure indivisible and use functions such as
                    378:          _h_a_i_p_a_r_t, and _b_i_g_n_u_m-_l_e_f_t_s_h_i_f_t to extract  parts  of
                    379:          it.
                    380: 
                    381: 
                    382: 
                    383:       1.2.7.   string    A  string  is  a  null   terminated
                    384:          sequence  of characters.  Most functions of symbols
                    385:          which operate on the symbol's print name will  also
                    386:          work  on strings.  The default reader syntax is set
                    387:          so that a sequence of characters surrounded by dou-
                    388:          ble quotes is a string.
                    389: 
                    390: 
                    391: 
                    392:       1.2.8.  port   A port is a structure which the  system
                    393:          I/O routines can reference to transfer data between
                    394:          the Lisp system and external media.   Unlike  other
                    395:          Lisp  objects  there  are  a very limited number of
                    396:          ports (20).  Ports are allocated by _i_n_f_i_l_e and _o_u_t_-
                    397:          _f_i_l_e  and  deallocated  by  _c_l_o_s_e and _r_e_s_e_t_i_o.  The
                    398:          _p_r_i_n_t function prints a port as a percent sign fol-
                    399:          lowed  by  the  name of the file it is connected to
                    400:          (if the port was opened  by  _f_i_l_e_o_p_e_n,  _i_n_f_i_l_e,  _o_r
                    401:          _o_u_t_f_i_l_e).   During initialization, FRANZ LISP binds
                    402:          the symbol piport to a port attached to  the  stan-
                    403:          dard  input  stream.   This port prints as %$stdin.
                    404:          There are ports connected to  the  standard  output
                    405:          and  error  streams,  which  print  as %$stdout and
                    406:          %$stderr.  This is discussed in more detail at  the
                    407:          beginning of Chapter 5.
                    408: 
                    409: 
                    410: 
                    411: 
                    412: ____________________
                    413: 9   [|-]The current algorithms for integer  arithmetic  opera-
                    414: tions will return (in certain cases) a result between +_2[30]
                    415: and 2[31] as a bignum although this could be represented  as
                    416: a fixnum.
                    417: 
                    418: 
                    419: 
                    420: 9                                   Printed: January 31, 1984
                    421: 
                    422: 
                    423: 
                    424: 
                    425: 
                    426: 
                    427: 
                    428: FRANZ LISP                                               1-6
                    429: 
                    430: 
                    431:       1.2.9.  vector    Vectors  are  indexed  sequences  of
                    432:          data.   They  can  be used to implement a notion of
                    433:          user-defined types via  their  associated  property
                    434:          list.    They  make  hunks  (see  below)  logically
                    435:          unnecessary, although hunks  are  very  efficiently
                    436:          garbage  collected.  There is a second kind of vec-
                    437:          tor,  called  an  immediate-vector,  which   stores
                    438:          binary  data.   The  name  that  the  function _t_y_p_e
                    439:          returns   for   immediate-vectors    is    vectori.
                    440:          Immediate-vectors   could   be  used  to  implement
                    441:          strings and block-flonum arrays, for example.  Vec-
                    442:          tors  are  discussed  in  chapter 9.  The functions
                    443:          _n_e_w-_v_e_c_t_o_r, and _v_e_c_t_o_r, can be used to create  vec-
                    444:          tors.
                    445: 
                    446: 
                    447: 8          ________________________________________________
                    448:            Subpart name   Get value   Set value    Type
                    449: 
                    450: 8          ________________________________________________________________________________________________
                    451:              datum[_i]       vref        vset      lispval
                    452: 8          ________________________________________________
                    453:              property       vprop     vsetprop    lispval
                    454:                                       vputprop
                    455: 8          ________________________________________________
                    456:                size         vsize         -       fixnum
                    457: 8          ________________________________________________
                    458: 7         |7|7|7|7|7|7|7|
                    459: 
                    460: 
                    461: 
                    462: 
                    463: 
                    464: 
                    465:                        |7|7|7|7|7|7|7|
                    466: 
                    467: 
                    468: 
                    469: 
                    470: 
                    471: 
                    472:                                    |7|7|7|7|7|7|7|
                    473: 
                    474: 
                    475: 
                    476: 
                    477: 
                    478: 
                    479:                                                |7|7|7|7|7|7|7|
                    480: 
                    481: 
                    482: 
                    483: 
                    484: 
                    485: 
                    486:                                                          |7|7|7|7|7|7|7|
                    487: 
                    488: 
                    489: 
                    490: 
                    491: 
                    492: 
                    493: 
                    494: 
                    495: 
                    496: 
                    497: 
                    498:       1.2.10.  array   Arrays are rather  complicated  types
                    499:          and  are  fully  described  in Chapter 9.  An array
                    500:          consists of a block of contiguous data, a  function
                    501:          to  access  that data, and auxiliary fields for use
                    502:          by  the  accessing  function.   Since  an   array's
                    503:          accessing function is created by the user, an array
                    504:          can  have  any  form  the  user  chooses  (e.g.  n-
                    505:          dimensional, triangular, or hash table).
                    506:          Arrays are created by the function _m_a_r_r_a_y.
                    507: 
                    508: 
                    509: 8   _______________________________________________________________
                    510:      Subpart name     Get value   Set value          Type
                    511: 
                    512: 8   ______________________________________________________________________________________________________________________________
                    513:     access function   getaccess   putaccess      binary, list
                    514:                                                    or symbol
                    515: 8   _______________________________________________________________
                    516:        auxiliary       getaux      putaux           lispval
                    517: 8   _______________________________________________________________
                    518:          data         arrayref     replace    block of contiguous
                    519:                                      set            lispval
                    520: 8   _______________________________________________________________
                    521:         length        getlength   putlength         fixnum
                    522: 8   _______________________________________________________________
                    523:          delta        getdelta    putdelta          fixnum
                    524: 
                    525: 
                    526: 
                    527: 9                                   Printed: January 31, 1984
                    528: 
                    529: 
                    530: 
                    531: 
                    532: 
                    533: 
                    534: 
                    535: FRANZ LISP                                               1-7
                    536: 
                    537: 
                    538: 8   _______________________________________________________________
                    539: 799  |9|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|
                    540: 7777777777777777777777777777777777777777899                   |9|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|
                    541: 7777777777777777777777777777777777777777899                               |9|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|
                    542: 7777777777777777777777777777777777777777899                                           |9|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|
                    543: 7777777777777777777777777777777777777777899                                                                 |9|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|99|
                    544: 777777777777777777777777777777777777778
                    545: 
                    546: 
                    547:       1.2.11.  value   A value cell contains a pointer to  a
                    548:          lispval.   This  type  is  used mainly by arrays of
                    549:          general lisp objects.  Value cells are created with
                    550:          the  _p_t_r  function.   A  value  cell  containing  a
                    551:          pointer  to  the  symbol  `foo'   is   printed   as
                    552:          `(ptr to)foo'
                    553: 
                    554: 
                    555: 
                    556:       1.2.12.  hunk   A hunk is a vector of from  1  to  128
                    557:          lispvals.   Once  a  hunk  is  created  (by _h_u_n_k or
                    558:          _m_a_k_h_u_n_k) it cannot grow or shrink.  The access time
                    559:          for an element of a hunk is slower than a list cell
                    560:          element but faster than an array.  Hunks are really
                    561:          only  allocated  in  sizes which are powers of two,
                    562:          but can appear to the user to be any size in the  1
                    563:          to  128  range.   Users  of hunks must realize that
                    564:          (_n_o_t (_a_t_o_m '_l_i_s_p_v_a_l)) will return true  if  _l_i_s_p_v_a_l
                    565:          is  a hunk.  Most lisp systems do not have a direct
                    566:          test for a list cell and instead use the above test
                    567:          and  assume  that  a true result means _l_i_s_p_v_a_l is a
                    568:          list cell.  In FRANZ LISP you can use _d_t_p_r to check
                    569:          for  a  list  cell.   Although  hunks  are not list
                    570:          cells, you can still access the first two hunk ele-
                    571:          ments  with _c_d_r and _c_a_r and you can access any hunk
                    572:          element with _c_x_r[|-].  You can set the value of  the
                    573:          first two elements of a hunk with _r_p_l_a_c_d and _r_p_l_a_c_a
                    574:          and you can set the value of  any  element  of  the
                    575:          hunk  with  _r_p_l_a_c_x.   A hunk is printed by printing
                    576:          its contents surrounded by { and }.  However a hunk
                    577:          cannot  be read in in this way in the standard lisp
                    578:          system.  It is easy to write a reader macro  to  do
                    579:          this if desired.
                    580: 
                    581: 
                    582: 
                    583:       1.2.13.   other    Occasionally,  you  can  obtain   a
                    584:          pointer  to  storage not allocated by the lisp sys-
                    585:          tem.  One example of this is  the  entry  field  of
                    586:          those  FRANZ  LISP  functions  written  in C.  Such
                    587:          objects are classified as of type  other.   Foreign
                    588:          functions  which  call malloc to allocate their own
                    589:          space, may also inadvertantly create such  objects.
                    590:          The  garbage  collector  is supposed to ignore such
                    591: ____________________
                    592: 9   [|-]In a hunk, the function _c_d_r references the first  ele-
                    593: ment and _c_a_r the second.
                    594: 
                    595: 
                    596: 
                    597:                                    Printed: January 31, 1984
                    598: 
                    599: 
                    600: 
                    601: 
                    602: 
                    603: 
                    604: 
                    605: FRANZ LISP                                               1-8
                    606: 
                    607: 
                    608:          objects.
                    609: 
                    610: 
                    611: 
                    612:    1.3.  Documentation   The conventions used in the follow-
                    613:       ing  chapters  were  designed  to give a great deal of
                    614:       information in a brief space.  The  first  line  of  a
                    615:       function  description  contains  the  function name in
                    616:       bold face and then lists the arguments, if  any.   The
                    617:       arguments all have names which begin with a letter  or
                    618:       letters and an underscore.  The  letter(s)  gives  the
                    619:       allowable  type(s) for that argument according to this
                    620:       table.
                    621: 
                    622: 
                    623: 8     _______________________________________________________
                    624:       Letter                Allowable type(s)
                    625: 
                    626: 8     ______________________________________________________________________________________________________________
                    627:       g        any type
                    628: 8     _______________________________________________________
                    629:       s        symbol (although nil may not be allowed)
                    630: 8     _______________________________________________________
                    631:       t        string
                    632: 8     _______________________________________________________
                    633:       l        list (although nil may be allowed)
                    634: 8     _______________________________________________________
                    635:       n        number (fixnum, flonum, bignum)
                    636: 8     _______________________________________________________
                    637:       i        integer (fixnum, bignum)
                    638: 8     _______________________________________________________
                    639:       x        fixnum
                    640: 8     _______________________________________________________
                    641:       b        bignum
                    642: 8     _______________________________________________________
                    643:       f        flonum
                    644: 8     _______________________________________________________
                    645:       u        function type (either binary or lambda body)
                    646: 8     _______________________________________________________
                    647:       y        binary
                    648: 8     _______________________________________________________
                    649:       v        vector
                    650: 8     _______________________________________________________
                    651:       V        vectori
                    652: 8     _______________________________________________________
                    653:       a        array
                    654: 8     _______________________________________________________
                    655:       e        value
                    656: 8     _______________________________________________________
                    657:       p        port (or nil)
                    658: 8     _______________________________________________________
                    659:       h        hunk
                    660: 8     _______________________________________________________
                    661: 7    |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|
                    662: 
                    663: 
                    664: 
                    665: 
                    666: 
                    667: 
                    668: 
                    669: 
                    670: 
                    671: 
                    672: 
                    673: 
                    674: 
                    675: 
                    676: 
                    677: 
                    678: 
                    679: 
                    680: 
                    681: 
                    682: 
                    683: 
                    684: 
                    685: 
                    686: 
                    687: 
                    688:             |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|
                    689: 
                    690: 
                    691: 
                    692: 
                    693: 
                    694: 
                    695: 
                    696: 
                    697: 
                    698: 
                    699: 
                    700: 
                    701: 
                    702: 
                    703: 
                    704: 
                    705: 
                    706: 
                    707: 
                    708: 
                    709: 
                    710: 
                    711: 
                    712: 
                    713: 
                    714: 
                    715:                                                            |7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|
                    716: 
                    717: 
                    718: 
                    719: 
                    720: 
                    721: 
                    722: 
                    723: 
                    724: 
                    725: 
                    726: 
                    727: 
                    728: 
                    729: 
                    730: 
                    731: 
                    732: 
                    733: 
                    734: 
                    735: 
                    736: 
                    737: 
                    738: 
                    739: 
                    740: 
                    741: 
                    742: 
                    743: 
                    744: 
                    745:       In the first line of  a  function  description,  those
                    746:       arguments preceded by a quote mark are evaluated (usu-
                    747:       ally before the function is called).  The quoting con-
                    748:       vention  is  used  so  that  we can give a name to the
                    749:       result of evaluating the argument and we can  describe
                    750:       the  allowable types.  If an argument is not quoted it
                    751:       does  not  mean  that  that  argument  will   not   be
                    752: 
                    753: 
                    754: 9                                   Printed: January 31, 1984
                    755: 
                    756: 
                    757: 
                    758: 
                    759: 
                    760: 
                    761: 
                    762: FRANZ LISP                                               1-9
                    763: 
                    764: 
                    765:       evaluated,  but  rather  that  if it is evaluated, the
                    766:       time at which it is  evaluated  will  be  specifically
                    767:       mentioned in the function description.  Optional argu-
                    768:       ments are surrounded by square brackets.  An  ellipsis
                    769:       (...) means zero or more occurrences of an argument of
                    770:       the directly preceding type.
                    771: 
                    772: 
                    773: 
                    774: 
                    775: 
                    776: 
                    777: 
                    778: 
                    779: 
                    780: 
                    781: 
                    782: 
                    783: 
                    784: 
                    785: 
                    786: 
                    787: 
                    788: 
                    789: 
                    790: 
                    791: 
                    792: 
                    793: 
                    794: 
                    795: 
                    796: 
                    797: 
                    798: 
                    799: 
                    800: 
                    801: 
                    802: 
                    803: 
                    804: 
                    805: 
                    806: 
                    807: 
                    808: 
                    809: 
                    810: 
                    811: 
                    812: 
                    813: 
                    814: 
                    815: 
                    816: 
                    817: 9
                    818: 
                    819: 9                                   Printed: January 31, 1984
                    820: 
                    821: 
                    822: 

unix.superglobalmegacorp.com

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