home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / LANGUAGS / XLISP / XLISP12.ARK / XLISP.MEM < prev    next >
Text File  |  1985-02-19  |  42KB  |  1,078 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.           XLISP: An Experimental Object Oriented Language
  7.  
  8.                             Version 1.2
  9.  
  10.                           October 11, 1984
  11.  
  12.  
  13.                                  by
  14.                              David Betz
  15.                          114 Davenport Ave.
  16.                        Manchester, NH  03103
  17.  
  18.                        (603) 625-4691 (home)
  19.  
  20.  
  21.     XLISP: An Experimental Object Oriented Language                 Page 2
  22.     TABLE OF CONTENTS
  23.  
  24.  
  25.             1.0     INTRODUCTION . . . . . . . . . . . . . . . . . . . . 3
  26.             2.0     A NOTE FROM THE AUTHOR . . . . . . . . . . . . . . . 4
  27.             3.0     XLISP COMMAND LOOP . . . . . . . . . . . . . . . . . 5
  28.             4.0     DATA TYPES . . . . . . . . . . . . . . . . . . . . . 6
  29.             5.0     THE EVALUATOR  . . . . . . . . . . . . . . . . . . . 7
  30.             6.0     LEXICAL CONVENTIONS  . . . . . . . . . . . . . . . . 8
  31.             7.0     OBJECTS  . . . . . . . . . . . . . . . . . . . . . . 9
  32.             8.0     SYMBOLS  . . . . . . . . . . . . . . . . . . . . .  12
  33.             9.0     EVALUATION FUNCTIONS . . . . . . . . . . . . . . .  13
  34.             10.0    SYMBOL FUNCTIONS . . . . . . . . . . . . . . . . .  14
  35.             11.0    PROPERTY LIST FUNCTIONS  . . . . . . . . . . . . .  15
  36.             12.0    LIST FUNCTIONS . . . . . . . . . . . . . . . . . .  16
  37.             13.0    DESTRUCTIVE LIST FUNCTIONS . . . . . . . . . . . .  18
  38.             14.0    PREDICATE FUNCTIONS  . . . . . . . . . . . . . . .  19
  39.             15.0    CONTROL FUNCTIONS  . . . . . . . . . . . . . . . .  20
  40.             16.0    ARITHMETIC FUNCTIONS . . . . . . . . . . . . . . .  22
  41.             17.0    BITWISE LOGICAL FUNCTIONS  . . . . . . . . . . . .  23
  42.             18.0    RELATIONAL FUNCTIONS . . . . . . . . . . . . . . .  24
  43.             19.0    STRING FUNCTIONS . . . . . . . . . . . . . . . . .  25
  44.             20.0    INPUT/OUTPUT FUNCTIONS . . . . . . . . . . . . . .  26
  45.             21.0    FILE I/O FUNCTIONS . . . . . . . . . . . . . . . .  27
  46.             22.0    SYSTEM FUNCTIONS . . . . . . . . . . . . . . . . .  28
  47.  
  48.  
  49.     XLISP: An Experimental Object Oriented Language                 Page 3
  50.     INTRODUCTION
  51.  
  52.  
  53.     1.0  INTRODUCTION
  54.  
  55.     XLISP is an experimental programming language combining some
  56.     of  the  features  of LISP with an object oriented extension
  57.     capability.  It was  implemented  to  allow  experimentation
  58.     with  object oriented programming on small computers.  There
  59.     are currently implementations running on  the  PDP-11  under
  60.     RSX-11,  RT-11, and UNIX V7, on the VAX-11 under VAX/VMS and
  61.     Berkeley VAX/UNIX, on the Z-80 under CP/M-80, on  the  Z8000
  62.     under UNIX V7, and on the 8088/8086 under CP/M-86 or MS-DOS.
  63.     A version is currently being developed for the  68000  under
  64.     CP/M-68K.   It  is  completely  written  in  the programming
  65.     language 'C'  and  is  easily  extended  with  user  written
  66.     built-in  functions  and classes.  It is available in source
  67.     form free of charge to  non-commercial  users.   Prospective
  68.     commercial users should contact the author for permission to
  69.     use XLISP.
  70.  
  71.     Many traditional LISP functions are built  into  XLISP.   In
  72.     addition,  XLISP defines the objects 'Object' and 'Class' as
  73.     primitives.   'Object'  is  the  only  class  that  has   no
  74.     superclass  and  hence  is  the  root of the class heirarchy
  75.     tree.  'Class'  is  the  class  of  which  all  classes  are
  76.     instances  (it  is  the  only  object that is an instance of
  77.     itself).
  78.  
  79.     This document is intended  to  be  a  brief  description  of
  80.     XLISP.    It   assumes  some  knowledge  of  LISP  and  some
  81.     understanding   of   the   concepts   of   object   oriented
  82.     programming.
  83.  
  84.     Version 1.2 of XLISP differs from  version  1.1  in  several
  85.     ways.   It  supports  many  more Lisp functions.  Also, many
  86.     version 1.1  functions  have  been  renamed  and/or  changed
  87.     slightly  to follow traditional Lisp usage.  One of the most
  88.     frequently reported problems in version  1.1  resulted  from
  89.     many  functions being named after their equivilent functions
  90.     in the C language.  This turned  out  to  be  confusing  for
  91.     people who were trying to learn XLISP using traditional LISP
  92.     texts as references.  Version 1.2 renames these functions to
  93.     be compatible with more traditional dialects of LISP.
  94.  
  95.     A recommended text for learning LISP programming is the book
  96.     "LISP"  by Winston and Horn and published by Addison Wesley.
  97.     The first edition of this book is based on MacLisp  and  the
  98.     second  edition  is based on Common Lisp.  Future version of
  99.     XLISP will migrate towards compatiblility with Common Lisp.
  100.  
  101.  
  102.     XLISP: An Experimental Object Oriented Language                 Page 4
  103.     A NOTE FROM THE AUTHOR
  104.  
  105.  
  106.     2.0  A NOTE FROM THE AUTHOR
  107.  
  108.     If you have any problems with XLISP, feel free to contact me
  109.     for  help  or  advice.   Please remember that since XLISP is
  110.     available in source form in  a  high  level  language,  many
  111.     users  have  been  making versions available on a variety of
  112.     machines.  If you call to report a problem with  a  specific
  113.     version,  I may not be able to help you if that version runs
  114.     on a machine to which I don't have access.
  115.  
  116.     If you find a bug  in  XLISP,  first  try  to  fix  the  bug
  117.     yourself  using  the  source  code  provided.   If  you  are
  118.     successful in fixing the bug, send the bug report along with
  119.     the  fix to me.  If you don't have access to a C compiler or
  120.     are unable to fix a bug, please send the bug  report  to  me
  121.     and I'll try to fix it.
  122.  
  123.     Any suggestions for improvements  will  be  welcomed.   Feel
  124.     free  to  extend  the  language  in  whatever way suits your
  125.     needs.  However, PLEASE DO  NOT  RELEASE  ENHANCED  VERSIONS
  126.     WITHOUT  CHECKING  WITH  ME  FIRST!!  I would like to be the
  127.     clearing house for new features added to XLISP.  If you want
  128.     to  add  features for your own personal use, go ahead.  But,
  129.     if you want to distribute your enhanced version, contact  me
  130.     first.  Please remember that the goal of XLISP is to provide
  131.     a language to learn and  experiment  with  LISP  and  object
  132.     oriented programming on small computers.  Version 1.2 barely
  133.     fits on a 64K Z-80 running CP/M-80.
  134.  
  135.  
  136.     XLISP: An Experimental Object Oriented Language                 Page 5
  137.     XLISP COMMAND LOOP
  138.  
  139.  
  140.     3.0  XLISP COMMAND LOOP
  141.  
  142.     When XLISP is started, it first  tries  to  load  "init.lsp"
  143.     from  the  default directory.  It then loads any files named
  144.     as parameters on the command line (after appending ".lsp" to
  145.     their names).  It then issues the following prompt:
  146.  
  147.     >
  148.  
  149.     This indicates that XLISP is waiting for an expression to be
  150.     typed.   When  an  incomplete expression has been typed (one
  151.     where the left and right parens don't match)  XLISP  changes
  152.     its prompt to:
  153.  
  154.     n>
  155.  
  156.     where n is an integer indicating how  many  levels  of  left
  157.     parens remain unclosed.
  158.  
  159.     When a complete expression has been entered, XLISP  attempts
  160.     to  evaluate  that  expression.  If the expression evaluates
  161.     successfully, XLISP prints the result of the evaluation  and
  162.     then  returns  to  the  initial  prompt  waiting for another
  163.     expression to be typed.
  164.  
  165.     Input can be aborted at any time by typing the CONTROL-G key
  166.     (it may be necessary to follow CONTROL-G by return).
  167.  
  168.  
  169.     XLISP: An Experimental Object Oriented Language                 Page 6
  170.     DATA TYPES
  171.  
  172.  
  173.     4.0  DATA TYPES
  174.  
  175.     There are several different data types  available  to  XLISP
  176.     programmers.
  177.  
  178.  
  179.           o  lists
  180.  
  181.           o  symbols
  182.  
  183.           o  strings
  184.  
  185.           o  integers
  186.  
  187.           o  objects
  188.  
  189.           o  file pointers
  190.  
  191.           o  subrs/fsubrs (built-in functions)
  192.  
  193.     Another data type is the stream.  A stream is  a  list  node
  194.     whose car points to the head of a list of integers and whose
  195.     cdr points to the last list node  of  the  list.   An  empty
  196.     stream  is  a  list node whose car and cdr are nil.  Each of
  197.     the integers in the list represent characters in the stream.
  198.     When  a  character  is read from a stream, the first integer
  199.     from the head of the list is removed and returned.   When  a
  200.     character  is  written to a stream, the integer representing
  201.     the character code of the character is appended to  the  end
  202.     of  the  list.   When  a function indicates that it takes an
  203.     input source as a parameter, this parameter can either be an
  204.     input  file pointer or a stream.  Similarly, when a function
  205.     indicates that it takes an output sink as a parameter,  this
  206.     parameter can either be an output file pointer or a stream.
  207.  
  208.  
  209.     XLISP: An Experimental Object Oriented Language                 Page 7
  210.     THE EVALUATOR
  211.  
  212.  
  213.     5.0  THE EVALUATOR
  214.  
  215.     The process of evaluation in XLISP:
  216.  
  217.           o  Integers,  strings,  objects,  file  pointers,  and
  218.              subrs evaluate to themselves
  219.  
  220.           o  Symbols evaluate to the value associated with their
  221.              current binding
  222.  
  223.           o  Lists are evaluated by evaluating the first element
  224.              of the list
  225.  
  226.               o  If it evaluates to a subr, the  remaining  list
  227.                  elements  are  evaluated and the subr is called
  228.                  with these evaluated expressions as arguments.
  229.  
  230.               o  If it evaluates  to  an  fsubr,  the  fsubr  is
  231.                  called  using  the  remaining  list elements as
  232.                  arguments  (they  are  evaluated  by  the  subr
  233.                  itself if necessary)
  234.  
  235.               o  If it evaluates to a list and the  car  of  the
  236.                  list  is  'lambda', the remaining list elements
  237.                  are evaluated and the resulting expressions are
  238.                  bound  to  the  formal  arguments of the lambda
  239.                  expression.   The  body  of  the  function   is
  240.                  executed within this new binding environment.
  241.  
  242.               o  If it evaluates to a list and the  car  of  the
  243.                  list  is 'nlambda', the remaining list elements
  244.                  are  bound  to  the  formal  arguments  of  the
  245.                  nlambda  expression.   The body of the function
  246.                  is   executed   within   this    new    binding
  247.                  environment.
  248.  
  249.               o  If it evaluates to an object, the  second  list
  250.                  element  is  evaluated  and  used  as a message
  251.                  selector.  The message formed by combining  the
  252.                  selector  with the values of the remaining list
  253.                  elements is sent to the object.
  254.  
  255.  
  256.  
  257.  
  258.     XLISP: An Experimental Object Oriented Language                 Page 8
  259.     LEXICAL CONVENTIONS
  260.  
  261.  
  262.     6.0  LEXICAL CONVENTIONS
  263.  
  264.     The following conventions are followed when  entering  XLISP
  265.     programs:
  266.  
  267.     Comments in XLISP code begin with a semi-colon character and
  268.     continue to the end of the line.
  269.  
  270.     Symbol names  in  XLISP  can  consist  of  any  sequence  of
  271.     non-blank printable characters except the following:
  272.  
  273.             ( ) . ' " ;
  274.  
  275.     Upper and lower case characters are distinct.   The  symbols
  276.     'CAR' and 'car' are not the same.  The names of all built-in
  277.     functions are in lower case.   The  names  of  all  built-in
  278.     objects  are  lower  case  with  an initial capital.  Symbol
  279.     names must not begin with a digit.
  280.  
  281.     Integer literals consist of a sequence of digits  optionally
  282.     beginning with a '+' or '-'.  The range of values an integer
  283.     can represent is limited by the size of a  C  'int'  on  the
  284.     machine that XLISP is running on.
  285.  
  286.     Literal strings are sequences of  characters  surrounded  by
  287.     double  quotes.   Within quoted strings the '\' character is
  288.     used to allow non-printable characters to be included.   The
  289.     codes recognized are:
  290.  
  291.             \\      means the character '\'
  292.             \n      means newline
  293.             \t      means tab
  294.             \r      means return
  295.             \e      means escape
  296.             \nnn    means the character whose octal code is nnn
  297.  
  298.     The single quote character can be used as a shorthand for  a
  299.     call on the function 'quote':
  300.  
  301.                             'foo
  302.     is equivalent to:
  303.                             (quote foo)
  304.  
  305.  
  306.     XLISP: An Experimental Object Oriented Language                 Page 9
  307.     OBJECTS
  308.  
  309.  
  310.     7.0  OBJECTS
  311.  
  312.     Definitions:
  313.  
  314.           o  selector - a symbol used to select  an  appropriate
  315.              method
  316.  
  317.           o  message - a selector and a list of actual arguments
  318.  
  319.           o  method - the code that implements a message
  320.  
  321.     Since XLISP was  created  to  provide  a  simple  basis  for
  322.     experimenting  with  object oriented programming, one of the
  323.     primitive data types included was 'object'.   In  XLISP,  an
  324.     object  consists of a data structure containing a pointer to
  325.     the object's class as well as a list containing  the  values
  326.     of the object's instance variables.
  327.  
  328.     Officially, there is no way to see inside an object (look at
  329.     the  values  of  its  instance  variables).  The only way to
  330.     communicate with an object is by sending it a message.  When
  331.     the  XLISP  evaluator  evaluates  a  list the value of whose
  332.     first element is an object, it interprets the value  of  the
  333.     second  element  of the list (which must be a symbol) as the
  334.     message selector.  The evaluator determines the class of the
  335.     receiving object and attempts to find a method corresponding
  336.     to the message selector in the set of messages  defined  for
  337.     that  class.   If  the  message is not found in the object's
  338.     class and the class has a super-class, the search  continues
  339.     by  looking  at  the  messages  defined for the super-class.
  340.     This process continues from  one  super-class  to  the  next
  341.     until  a  method  for the message is found.  If no method is
  342.     found, an error occurs.
  343.  
  344.     When a method is found, the evaluator  binds  the  receiving
  345.     object  to  the  symbol 'self', binds the class in which the
  346.     method was found to the symbol 'msgclass', and evaluates the
  347.     method  using the remaining elements of the original list as
  348.     arguments  to  the  method.   These  arguments  are   always
  349.     evaluated prior to being bound to their corresponding formal
  350.     arguments.  The result of evaluating the method becomes  the
  351.     result of the expression.
  352.  
  353.  
  354.     XLISP: An Experimental Object Oriented Language                Page 10
  355.     OBJECTS
  356.  
  357.  
  358.     Classes:
  359.  
  360.     Object  THE TOP OF THE CLASS HEIRARCHY
  361.  
  362.         Messages:
  363.  
  364.             show    SHOW AN OBJECT'S INSTANCE VARIABLES
  365.                 returns     the object
  366.  
  367.             class   RETURN THE CLASS OF AN OBJECT
  368.                 returns     the class of the object
  369.  
  370.             isnew   THE DEFAULT OBJECT INITIALIZATION ROUTINE
  371.                 returns     the object
  372.  
  373.             sendsuper <sel> [<args>...] SEND SUPERCLASS A MESSAGE
  374.                 <sel>       the message selector
  375.                 <args>      the message arguments
  376.                 returns     the result of sending the message
  377.  
  378.  
  379.     XLISP: An Experimental Object Oriented Language                Page 11
  380.     OBJECTS
  381.  
  382.  
  383.     Class   THE CLASS OF ALL OBJECT CLASSES (including itself)
  384.  
  385.         Messages:
  386.  
  387.             new     CREATE A NEW INSTANCE OF A CLASS
  388.                 returns     the new class object
  389.  
  390.             isnew [<scls>]  INITIALIZE A NEW CLASS
  391.                 <scls>      the superclass
  392.                 returns     the new class object
  393.  
  394.             answer <msg> <fargs> <code>     ADD A MESSAGE TO A CLASS
  395.                 <msg>       the message symbol
  396.                 <fargs>     the formal argument list
  397.                               this list is of the form:
  398.                                 (<farg>... [&rest <rarg>] [&aux <aux>...])
  399.                               where
  400.                                 <farg>      a formal argument
  401.                                 <rarg>      bound to the rest of the arguments
  402.                                 <aux>       a auxiliary variable
  403.                 <code>      a list of executable expressions
  404.                 returns     the object
  405.  
  406.             ivars <vars>    DEFINE THE LIST OF INSTANCE VARIABLES
  407.                 <vars>      the list of instance variable symbols
  408.                 returns     the object
  409.  
  410.             cvars <vars>    DEFINE THE LIST OF CLASS VARIABLES
  411.                 <vars>      the list of class variable symbols
  412.                 returns     the object
  413.  
  414.  
  415.     When a new instance of a class is  created  by  sending  the
  416.     message  'new'  to  an  existing  class, the message 'isnew'
  417.     followed by whatever parameters were  passed  to  the  'new'
  418.     message is sent to the newly created object.
  419.  
  420.     When a new class is created by sending the 'new' message  to
  421.     the  object  'Class', an optional parameter may be specified
  422.     indicating  the  superclass  of  the  new  class.   If  this
  423.     parameter  is  omitted,  the new class will be a subclass of
  424.     'Object'.  A class inherits all  instance  variables,  class
  425.     variables, and methods from its super-class.
  426.  
  427.  
  428.     XLISP: An Experimental Object Oriented Language                Page 12
  429.     SYMBOLS
  430.  
  431.  
  432.     8.0  SYMBOLS
  433.  
  434.  
  435.           o  self  -  the  current  object  (within  a   message
  436.              context)
  437.  
  438.           o  msgclass - the class in which  the  current  method
  439.              was found
  440.  
  441.           o  *oblist* - the object list
  442.  
  443.           o  *standard-input* - the standard input file
  444.  
  445.           o  *standard-output* - the standard output file
  446.  
  447.           o  *tracenable* - flag controlling trace back printout
  448.              on errors
  449.  
  450.           o  *unbound* - indicator for unbound symbols
  451.  
  452.  
  453.  
  454.     XLISP: An Experimental Object Oriented Language                Page 13
  455.     EVALUATION FUNCTIONS
  456.  
  457.  
  458.     9.0  EVALUATION FUNCTIONS
  459.  
  460.     (eval <expr>)  EVALUATE AN XLISP EXPRESSION
  461.         <expr>      the expression to be evaluated
  462.         returns     the result of evaluating the expression
  463.  
  464.     (apply <fun> <args>)  APPLY A FUNCTION TO A LIST OF ARGUMENTS
  465.         <fun>       the function to apply (or function symbol)
  466.         <args>      the argument list
  467.         returns     the result of applying the function to the argument list
  468.  
  469.     (funcall <fun> <arg>...)  CALL A FUNCTION WITH ARGUMENTS
  470.         <fun>       the function to call (or function symbol)
  471.         <arg>       arguments to pass to the function
  472.         returns     the result of calling the function with the arguments
  473.  
  474.     (quote <expr>)  RETURN AN EXPRESSION UNEVALUATED
  475.         <expr>      the expression to be quoted (quoted)
  476.         returns     <expr> unevaluated
  477.  
  478.  
  479.     XLISP: An Experimental Object Oriented Language                Page 14
  480.     SYMBOL FUNCTIONS
  481.  
  482.  
  483.     10.0  SYMBOL FUNCTIONS
  484.  
  485.     (set <sym> <expr>)  SET THE VALUE OF A SYMBOL
  486.         <sym>       the symbol being set
  487.         <expr>      the new value
  488.         returns     the new value
  489.  
  490.     (setq <sym> <expr>)  SET THE VALUE OF A SYMBOL
  491.         <sym>       the symbol being set (quoted)
  492.         <expr>      the new value
  493.         returns     the new value
  494.  
  495.     (defun <sym> <fargs> <expr>...)  DEFINE A FUNCTION WITH EVALUATED ARGS
  496.     (ndefun <sym> <fargs> <expr>...)  DEFINE A FUNCTION WITH UNEVALUATED ARGS
  497.         <sym>       symbol being defined (quoted)
  498.         <fargs>     list of formal arguments (quoted)
  499.                       this list is of the form:
  500.                         (<farg>... [&rest <rarg>] [&aux <aux>...])
  501.                       where
  502.                         <farg>      is a formal argument
  503.                         <rarg>      bound to the rest of the arguments
  504.                         <aux>       is an auxiliary variable
  505.         <expr>      expressions constituting the body of the
  506.                     function (quoted)
  507.         returns     the function symbol
  508.  
  509.     (gensym <tag>)  GENERATE A SYMBOL
  510.         <tag>       symbol/string/number
  511.         returns     the new symbol
  512.  
  513.     (intern <sym>)  INTERN A SYMBOL ON THE OBLIST
  514.         <sym>       the symbol
  515.         returns     the interned symbol
  516.  
  517.     (symbol-name <sym>)  GET THE PRINT NAME OF A SYMBOL
  518.         <sym>       the symbol
  519.         returns     the symbol's print name
  520.  
  521.     (symbol-plist <sym>)  GET THE PROPERTY LIST OF A SYMBOL
  522.         <sym>       the symbol
  523.         returns     the symbol's property list
  524.  
  525.  
  526.     XLISP: An Experimental Object Oriented Language                Page 15
  527.     PROPERTY LIST FUNCTIONS
  528.  
  529.  
  530.     11.0  PROPERTY LIST FUNCTIONS
  531.  
  532.     (get <sym> <prop>)  GET THE VALUE OF A PROPERTY
  533.         <sym>       the symbol
  534.         <prop>      the property symbol
  535.         returns     the property value or nil
  536.  
  537.     (putprop <sym> <value> <prop>)  PUT A PROPERTY ONTO A PROPERTY LIST
  538.         <sym>       the symbol
  539.         <value>     the property value
  540.         <prop>      the property symbol
  541.         returns     the value
  542.  
  543.     (remprop <prop> <sym>)  REMOVE A PROPERTY
  544.         <sym>       the symbol
  545.         <prop>      the property symbol
  546.         returns     nil
  547.  
  548.  
  549.     XLISP: An Experimental Object Oriented Language                Page 16
  550.     LIST FUNCTIONS
  551.  
  552.  
  553.     12.0  LIST FUNCTIONS
  554.  
  555.     (car <expr>)  RETURN THE CAR OF A LIST NODE
  556.         <expr>      the list node
  557.         returns     the car of the list node
  558.  
  559.     (cdr <expr>)  RETURN THE CDR OF A LIST NODE
  560.         <expr>      the list node
  561.         returns     the cdr of the list node
  562.  
  563.     (caar <expr>) == (car (car <expr>))
  564.     (cadr <expr>) == (car (cdr <expr>))
  565.     (cdar <expr>) == (cdr (car <expr>))
  566.     (cddr <expr>) == (cdr (cdr <expr>))
  567.  
  568.     (cons <expr1> <expr2>)  CONSTRUCT A NEW LIST NODE
  569.         <expr1>     the car of the new list node
  570.         <expr2>     the cdr of the new list node
  571.         returns     the new list node
  572.  
  573.     (list <expr>...)  CREATE A LIST OF VALUES
  574.         <expr>      expressions to be combined into a list
  575.         returns     the new list
  576.  
  577.     (append <expr>...)  APPEND LISTS
  578.         <expr>      lists whose elements are to be appended
  579.         returns     the new list
  580.  
  581.     (reverse <expr>)  REVERSE A LIST
  582.         <expr>      the list to reverse
  583.         returns     a new list in the reverse order
  584.  
  585.     (last <list>)  RETURN THE LAST LIST NODE OF A LIST
  586.         <list>      the list
  587.         returns     the last list node in the list
  588.  
  589.     (member <expr> <list>)  FIND AN EXPRESSION IN A LIST
  590.         <expr>      the expression to find (equal test)
  591.         <list>      the list to search
  592.         returns     the remainder of the list starting with the expression
  593.  
  594.     (memq <expr> <list>)  FIND AN EXPRESSION IN A LIST
  595.         <expr>      the expression to find (eq test)
  596.         <list>      the list to find it in
  597.         returns     the remainder of the list starting with the expression
  598.  
  599.  
  600.     XLISP: An Experimental Object Oriented Language                Page 17
  601.     LIST FUNCTIONS
  602.  
  603.  
  604.     (assoc <expr> <alist>)  FIND AN EXPRESSION IN AN ASSOCIATION LIST
  605.         <expr>      the expression to find (equal test)
  606.         <alist>     the association list
  607.         returns     the alist entry or nil
  608.  
  609.     (assq <expr> <alist>)  FIND AN EXPRESSION IN AN ASSOCIATION LIST
  610.         <expr>      the expression to find (eq test)
  611.         <alist>     the association list
  612.         returns     the alist entry or nil
  613.  
  614.     (length <expr>)  FIND THE LENGTH OF A LIST
  615.         <expr>      the list
  616.         returns     the length of the list
  617.  
  618.     (nth <n> <list>)  RETURN THE NTH ELEMENT OF A LIST
  619.         <n>         the number of the element to return (zero origin)
  620.         <list>      the list
  621.         returns     the nth element or nil if the list isn't that long
  622.  
  623.     (nthcdr <n> <list>)  RETURN THE NTH CDR OF A LIST
  624.         <n>         the number of the element to return (zero origin)
  625.         <list>      the list
  626.         returns     the nth cdr or nil if the list isn't that long
  627.  
  628.     (mapcar <fcn> <list1>...<listn>)  APPLY FUNCTION TO SUCCESSIVE CARS
  629.         <fcn>       the function or function name
  630.         <list1..n>  a list for each argument of the function
  631.         returns     the list of values returned by each function invocation
  632.  
  633.     (maplist <fcn> <list1>...<listn>)  APPLY FUNCTION TO SUCCESSIVE CDRS
  634.         <fcn>       the function or function name
  635.         <list1..n>  a list for each argument of the function
  636.         returns     the list of values returned by each function invocation
  637.  
  638.     (subst <to> <from> <expr>)  SUBSTITUTE ONE EXPRESSION FOR ANOTHER
  639.         <to>        the new expression
  640.         <from>      the old expression
  641.         <expr>      the expression in which to do the substitutions
  642.         returns     the expression with substitutions
  643.  
  644.     (sublis <alist> <expr>)  SUBSTITUTE USING AN ASSOCIATION LIST
  645.         <alist>     the association list
  646.         <expr>      the expression in which to do the substitutions
  647.         returns     the expression with substitutions
  648.  
  649.  
  650.     XLISP: An Experimental Object Oriented Language                Page 18
  651.     DESTRUCTIVE LIST FUNCTIONS
  652.  
  653.  
  654.     13.0  DESTRUCTIVE LIST FUNCTIONS
  655.  
  656.     (rplaca <list> <expr>)  REPLACE THE CAR OF A LIST NODE
  657.         <list>      the list node
  658.         <expr>      the new value for the car of the list node
  659.         returns     the list node after updating the car
  660.  
  661.     (rplacd <list> <expr>)  REPLACE THE CDR OF A LIST NODE
  662.         <list>      the list node
  663.         <expr>      the new value for the cdr of the list node
  664.         returns     the list node after updating the cdr
  665.  
  666.     (nconc <list>...)  DESTRUCTIVELY CONCATENATE LISTS
  667.         <list>      lists to concatenate
  668.         returns     the result of concatenating the lists
  669.  
  670.     (delete <expr> <list>)  DELETE OCCURANCES OF AN EXPRESSION FROM A LIST
  671.         <expr>      the expression to delete (equal test)
  672.         <list>      the list
  673.         returns     the list with the matching expressions deleted
  674.  
  675.     (delq <expr> <list>)  DELETE OCCURANCES OF AN EXPRESSION FROM A LIST
  676.         <expr>      the expression to delete (eq test)
  677.         <list>      the list
  678.         returns     the list with the matching expressions deleted
  679.  
  680.  
  681.     XLISP: An Experimental Object Oriented Language                Page 19
  682.     PREDICATE FUNCTIONS
  683.  
  684.  
  685.     14.0  PREDICATE FUNCTIONS
  686.  
  687.     (atom <expr>)  IS THIS AN ATOM?
  688.         <expr>      the expression to check
  689.         returns     t if the value is an atom, nil otherwise
  690.  
  691.     (symbolp <expr>)  IS THIS A SYMBOL?
  692.         <expr>      the expression to check
  693.         returns     t if the expression is a symbol, nil otherwise
  694.  
  695.     (numberp <expr>)  IS THIS A NUMBER?
  696.         <expr>      the expression to check
  697.         returns     t if the expression is a symbol, nil otherwise
  698.  
  699.     (null <expr>)  IS THIS AN EMPTY LIST?
  700.         <expr>      the list to check
  701.         returns     t if the list is empty, nil otherwise
  702.  
  703.     (not <expr>)  IS THIS FALSE?
  704.         <expr>      the expression to check
  705.         return      t if the expression is nil, nil otherwise
  706.  
  707.     (listp <expr>)  IS THIS A LIST?
  708.         <expr>      the expression to check
  709.         returns     t if the value is a list node or nil, nil otherwise
  710.  
  711.     (consp <expr>)  IS THIS A NON-EMPTY LIST?
  712.         <expr>      the expression to check
  713.         returns     t if the value is a list node, nil otherwise
  714.  
  715.     (boundp <sym>)  IS THIS A BOUND SYMBOL?
  716.         <sym>       the symbol
  717.         returns     t if a value is bound to the symbol, nil otherwise
  718.  
  719.     (eq <expr1> <expr2>)  ARE THE EXPRESSIONS IDENTICAL?
  720.         <expr1>     the first expression
  721.         <expr2>     the second expression
  722.         returns     t if they are equal, nil otherwise
  723.  
  724.     (equal <expr1> <expr2>)  ARE THE EXPRESSIONS EQUAL?
  725.         <expr1>     the first expression
  726.         <expr2>     the second expression
  727.         returns     t if they are equal, nil otherwise
  728.  
  729.  
  730.     XLISP: An Experimental Object Oriented Language                Page 20
  731.     CONTROL FUNCTIONS
  732.  
  733.  
  734.     15.0  CONTROL FUNCTIONS
  735.  
  736.     (cond <pair>...)  EVALUATE CONDITIONALLY
  737.         <pair>      pair consisting of:
  738.                         (<pred> <expr>...)
  739.                       where
  740.                         <pred>      is a predicate expression
  741.                         <expr>      evaluated if the predicate
  742.                                     is not nil
  743.         returns     the value of the first expression whose predicate
  744.                     is not nil
  745.  
  746.     (let (<binding>...) <expr>...)  BIND SYMBOLS AND EVALUATE EXPRESSIONS
  747.         <binding>   the variable bindings each of which is either:
  748.                     1)  a symbol (which is initialized to nil)
  749.                     2)  a list whose car is a symbol and whose cadr
  750.                             is an initialization expression
  751.         <expr>...   the expressions to be evaluated with the specified bindings
  752.         returns     the value of the last expression
  753.  
  754.     (and <expr>...)  THE LOGICAL AND OF A LIST OF EXPRESSIONS
  755.         <expr>...   the expressions to be ANDed
  756.         returns     nil if any expression evaluates to nil,
  757.                     otherwise the value of the last expression
  758.                     (evaluation of expressions stops after the first
  759.                      expression that evaluates to nil)
  760.  
  761.     (or <expr>...)  THE LOGICAL OR OF A LIST OF EXPRESSIONS
  762.         <expr>...   the expressions to be ORed
  763.         returns     nil if all expressions evaluate to nil,
  764.                     otherwise the value of the first non-nil expression
  765.                     (evaluation of expressions stops after the first
  766.                      expression that does not evaluate to nil)
  767.  
  768.     (if <texpr> <expr1> [<expr2>])  EXECUTE EXPRESSIONS CONDITIONALLY
  769.         <texpr>     the test expression
  770.         <expr1>     the expression to be evaluated if texpr is non-nil
  771.         <expr2>     the expression to be evaluated if texpr is nil
  772.         returns     the value of the selected expression
  773.  
  774.     (progn <expr>...)  EXECUTE EXPRESSIONS SEQUENTIALLY
  775.         <expr>...   the expressions to evaluate
  776.         returns     the value of the last expression
  777.  
  778.     (while <texpr> <expr>...)  ITERATE WHILE AN EXPRESSION IS TRUE
  779.         <texpr>     the test expression evaluated at start of each iteration
  780.         <expr>...   the expressions evaluated as long as <texpr> evaluates to
  781.                     non-nil
  782.         returns     the value of the last expression
  783.  
  784.  
  785.     XLISP: An Experimental Object Oriented Language                Page 21
  786.     CONTROL FUNCTIONS
  787.  
  788.  
  789.     (repeat <iexpr> <expr>...)  ITERATE USING A REPEAT COUNT
  790.         <iexpr>     the integer expression indicating the repeat count
  791.         <expr>...   the expressions evaluated <iexpr> times
  792.         returns     the value of the last expression
  793.  
  794.  
  795.     XLISP: An Experimental Object Oriented Language                Page 22
  796.     ARITHMETIC FUNCTIONS
  797.  
  798.  
  799.     16.0  ARITHMETIC FUNCTIONS
  800.  
  801.     (+ <expr>...)  ADD A LIST OF NUMBERS
  802.         <expr>...   the numbers
  803.         returns     the result of the addition
  804.  
  805.     (- <expr>...)  SUBTRACT A LIST OF NUMBERS
  806.         <expr>...   the numbers
  807.         returns     the result of the subtraction
  808.  
  809.     (* <expr>...)  MULTIPLY A LIST OF NUMBERS
  810.         <expr>...   the numbers
  811.         returns     the result of the multiplication
  812.  
  813.     (/ <expr>...)  DIVIDE A LIST OF NUMBERS
  814.         <expr>...   the numbers
  815.         returns     the result of the division
  816.  
  817.     (1+ <expr>)  ADD ONE TO A NUMBER
  818.         <expr>      the number
  819.         returns     the number plus one
  820.  
  821.     (1- <expr>)  SUBTRACT ONE FROM A NUMBER
  822.         <expr>      the number
  823.         returns     the number minus one
  824.  
  825.     (rem <expr>...)  REMAINDER OF A LIST OF NUMBERS
  826.         <expr>...   the numbers
  827.         returns     the result of the remainder operation
  828.  
  829.     (minus <expr>)  NEGATE A NUMBER
  830.         <expr>      the number
  831.         returns     the number negated
  832.  
  833.     (min <expr>...)  THE SMALLEST OF A LIST OF NUMBERS
  834.         <expr>...   the expressions to be checked
  835.         returns     the smallest number in the list
  836.  
  837.     (max <expr>...)  THE LARGEST OF A LIST OF NUMBERS
  838.         <expr>...   the expressions to be checked
  839.         returns     the largest number in the list
  840.  
  841.     (abs <expr>)  THE ABSOLUTE VALUE OF A NUMBER
  842.         <expr>      the number
  843.         returns     the absolute value of the number
  844.  
  845.  
  846.     XLISP: An Experimental Object Oriented Language                Page 23
  847.     BITWISE LOGICAL FUNCTIONS
  848.  
  849.  
  850.     17.0  BITWISE LOGICAL FUNCTIONS
  851.  
  852.     (bit-and <expr>...)  THE BITWISE AND OF A LIST OF NUMBERS
  853.         <expr>      the numbers
  854.         returns     the result of the and operation
  855.  
  856.     (bit-ior <expr...)  THE BITWISE INCLUSIVE OR OF A LIST OF NUMBERS
  857.         <expr>      the numbers
  858.         returns     the result of the inclusive or operation
  859.  
  860.     (bit-xor <expr...)  THE BITWISE EXCLUSIVE OR OF A LIST OF NUMBERS
  861.         <expr>      the numbers
  862.         returns     the result of the exclusive or operation
  863.  
  864.     (bit-not <expr>)  THE BITWISE NOT OF A NUMBER
  865.         <expr>      the number
  866.         returns     the bitwise inversion of number
  867.  
  868.  
  869.     XLISP: An Experimental Object Oriented Language                Page 24
  870.     RELATIONAL FUNCTIONS
  871.  
  872.  
  873.     18.0  RELATIONAL FUNCTIONS
  874.  
  875.     The relational functions can be used to compare integers  or
  876.     strings.   The  functions  '='  and '/=' can also be used to
  877.     compare other types.  The result  of  these  comparisons  is
  878.     computed the same way as for 'eq'.
  879.  
  880.     (< <e1> <e2>)  TEST FOR LESS THAN
  881.         <e1>        the left operand of the comparison
  882.         <e2>        the right operand of the comparison
  883.         returns     the result of comparing <e1> with <e2>
  884.  
  885.     (<= <e1> <e2>)  TEST FOR LESS THAN OR EQUAL TO
  886.         <e1>        the left operand of the comparison
  887.         <e2>        the right operand of the comparison
  888.         returns     the result of comparing <e1> with <e2>
  889.  
  890.     (= <e1> <e2>)  TEST FOR EQUAL TO
  891.         <e1>        the left operand of the comparison
  892.         <e2>        the right operand of the comparison
  893.         returns     the result of comparing <e1> with <e2>
  894.  
  895.     (/= <e1> <e2>)  TEST FOR NOT EQUAL TO
  896.         <e1>        the left operand of the comparison
  897.         <e2>        the right operand of the comparison
  898.         returns     the result of comparing <e1> with <e2>
  899.  
  900.     (>= <e1> <e2>)  TEST FOR GREATER THAN OR EQUAL TO
  901.         <e1>        the left operand of the comparison
  902.         <e2>        the right operand of the comparison
  903.         returns     the result of comparing <e1> with <e2>
  904.  
  905.     (> <e1> <e2>)  TEST FOR GREATER THAN
  906.         <e1>        the left operand of the comparison
  907.         <e2>        the right operand of the comparison
  908.         returns     the result of comparing <e1> with <e2>
  909.  
  910.  
  911.     XLISP: An Experimental Object Oriented Language                Page 25
  912.     STRING FUNCTIONS
  913.  
  914.  
  915.     19.0  STRING FUNCTIONS
  916.  
  917.     (strcat <expr>...)  CONCATENATE STRINGS
  918.         <expr>...   the strings to concatenate
  919.         returns     the result of concatenating the strings
  920.  
  921.     (strlen <expr>)  COMPUTE THE LENGTH OF A STRING
  922.         <expr>      the string
  923.         returns     the length of the string
  924.  
  925.     (substr <expr> <sexpr> [<lexpr>]) EXTRACT A SUBSTRING
  926.         <expr>      the string
  927.         <sexpr>     the starting position
  928.         <lexpr>     the length (default is rest of string)
  929.         returns     substring starting at <sexpr> for <lexpr>
  930.  
  931.     (ascii <expr>)  NUMERIC VALUE OF CHARACTER
  932.         <expr>      the string
  933.         returns     the ascii code of the first character
  934.  
  935.     (chr <expr>)  CHARACTER EQUIVALENT OF ASCII VALUE
  936.         <expr>      the numeric expression
  937.         returns     a one character string whose first character is <expr>
  938.  
  939.     (atoi <expr>)  CONVERT AN ASCII STRING TO AN INTEGER
  940.         <expr>      the string
  941.         returns     the integer value of the string expression
  942.  
  943.     (itoa <expr>)  CONVERT AN INTEGER TO AN ASCII STRING
  944.         <expr>      the integer
  945.         returns     the string representation of the integer value
  946.  
  947.  
  948.     XLISP: An Experimental Object Oriented Language                Page 26
  949.     INPUT/OUTPUT FUNCTIONS
  950.  
  951.  
  952.     20.0  INPUT/OUTPUT FUNCTIONS
  953.  
  954.     (read [<source>[<eof>]])  READ AN XLISP EXPRESSION
  955.         <source>    the input source (default is standard input)
  956.         <eof>       the value to return on end of file (default is nil)
  957.         returns     the expression read
  958.  
  959.     (print <expr> [<sink>])  PRINT A LIST OF VALUES ON A NEW LINE
  960.         <expr>      the expressions to be printed
  961.         <sink>      the output sink (default is standard output)
  962.         returns     nil
  963.  
  964.     (prin1 <expr> [<sink>])  PRINT A LIST OF VALUES
  965.         <expr>      the expressions to be printed
  966.         <sink>      the output sink (default is standard output)
  967.         returns     nil
  968.  
  969.     (princ <expr> [<sink>])  PRINT A LIST OF VALUES WITHOUT QUOTING
  970.         <expr>      the expressions to be printed
  971.         <sink>      the output sink (default is standard output)
  972.         returns     nil
  973.  
  974.     (terpri [<sink>])  TERMINATE THE CURRENT PRINT LINE
  975.         <sink>      the output sink (default is standard output)
  976.         returns     nil
  977.  
  978.     (flatsize <expr>)  LENGTH OF PRINTED REPRESENTATION USING PRIN1
  979.         <expr>      the expression
  980.         returns     the length
  981.  
  982.     (flatc <expr>)  LENGTH OF PRINTED REPRESENTATION USING PRINC
  983.         <expr>      the expression
  984.         returns     the length
  985.  
  986.     (explode <expr>)  CHARACTERS IN PRINTED REPRESENTATION USING PRIN1
  987.         <expr>      the expression
  988.         returns     the list of characters
  989.  
  990.     (explodec <expr>)  CHARACTERS IN PRINTED REPRESENTATION USING PRINC
  991.         <expr>      the expression
  992.         returns     the list of characters
  993.  
  994.     (maknam <list>)  BUILD AN UNINTERNED SYMBOL FROM A LIST OF CHARACTERS
  995.         <list>      list of characters in symbol name
  996.         returns     the symbol
  997.  
  998.     (implode <list>)  BUILD AN INTERNED SYMBOL FROM A LIST OF CHARACTERS
  999.         <list>      list of characters in symbol name
  1000.         returns     the symbol
  1001.  
  1002.  
  1003.     XLISP: An Experimental Object Oriented Language                Page 27
  1004.     FILE I/O FUNCTIONS
  1005.  
  1006.  
  1007.     21.0  FILE I/O FUNCTIONS
  1008.  
  1009.     (openi <fname>)  OPEN AN INPUT FILE
  1010.         <fname>     the file name string
  1011.         returns     a file pointer
  1012.  
  1013.     (openo <fname>)  OPEN AN OUTPUT FILE
  1014.         <fname>     the file name string
  1015.         returns     a file pointer
  1016.  
  1017.     (close <fp>)  CLOSE A FILE
  1018.         <fp>        the file pointer
  1019.         returns     nil
  1020.  
  1021.     (read-char [<source>])  READ A CHARACTER FROM A FILE OR STREAM
  1022.         <source>    the input source (default is standard input)
  1023.         returns     the character (integer)
  1024.  
  1025.     (peek-char [<flag> [<source>]])  PEEK AT THE NEXT CHARACTER
  1026.         <flag>      flag for skipping white space (default is nil)
  1027.         <source>    the input source (default is standard input)
  1028.         returns     the character (integer)
  1029.  
  1030.     (write-char <ch> [<sink>])  WRITE A CHARACTER TO A FILE OR STREAM
  1031.         <ch>        the character to put (integer)
  1032.         <sink>      the output sink (default is standard output)
  1033.         returns     the character (integer)
  1034.  
  1035.     (readline [<source>])  READ A LINE FROM A FILE OR STREAM
  1036.         <source>    the input source (default is standard input)
  1037.         returns     the input string
  1038.  
  1039.  
  1040.     XLISP: An Experimental Object Oriented Language                Page 28
  1041.     SYSTEM FUNCTIONS
  1042.  
  1043.  
  1044.     22.0  SYSTEM FUNCTIONS
  1045.  
  1046.     (load <fname>)  LOAD AN XLISP SOURCE FILE
  1047.         <fname>     the filename string (".lsp" is appended)
  1048.         returns     the filename
  1049.  
  1050.     (gc)  FORCE GARBAGE COLLECTION
  1051.         returns     nil
  1052.  
  1053.     (expand <num>)  EXPAND MEMORY BY ADDING SEGMENTS
  1054.         <num>       the number of segments to add
  1055.         returns     the number of segments added
  1056.  
  1057.     (alloc <num>)  CHANGE NUMBER OF NODES TO ALLOCATE IN EACH SEGMENT
  1058.         <num>       the number of nodes to allocate
  1059.         returns     the old number of nodes to allocate
  1060.  
  1061.     (mem)  SHOW MEMORY ALLOCATION STATISTICS
  1062.         returns     nil
  1063.  
  1064.     (type <expr>)  RETURNS THE TYPE OF THE EXPRESSION
  1065.         <expr>      the expression to return the type of
  1066.         returns     nil if the value is nil otherwise one of the symbols:
  1067.                         SYM   for symbols
  1068.                         OBJ   for objects
  1069.                         LIST  for list nodes
  1070.                         SUBR  for subroutine nodes with evaluated arguments
  1071.                         FSUBR for subroutine nodes with unevaluated arguments
  1072.                         STR   for string nodes
  1073.                         INT   for integer nodes
  1074.                         FPTR  for file pointer nodes
  1075.  
  1076.     (exit)  EXIT XLISP
  1077.         returns     never returns
  1078.