Annotation of 43BSD/ucb/lisp/lisplib/manual/ch1.r, revision 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.