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

unix.superglobalmegacorp.com

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