Date : Wed, 16 Jan 1985 08:38:43 EST
From : David Towson (SECAD) <towson@Amsaa.ARPA>
Subject: XLISP news (~10K char).
Fellow CP/Mers - As several people have recently expressed interest in XLISP
by David Betz, here is some XLISP news passed along to me by my colleague,
Brint Cooper:
From seismo!harvard!godot!mit-eddie!genrad!decvax!ittvax!sii!drd
Article 89 of net.lang.lisp:
I am posting this for David Betz who
does not have a direct news connection.
=========================================================================
XLISP USERS
This document briefly describes my version 1.2 of XLISP. It has nothing
in common with the previously released version 1.2 other than that it is
a descendant of my original version 1.1. It will be available shortly from
the PC-SIG, SIG/M and PC-BLUE user groups. It will be distributed in
source form with machine readable documentation. Please don't ask to have
the sources distributed on usenet. The entire distribution is over 200K
bytes!
David Betz
...!decvax!sii!has70!betz
=========================================================================
XLISP: An Experimental Object Oriented Language
Version 1.2
October 11, 1984
by
David Betz
114 Davenport Ave.
Manchester, NH 03103
(603) 625-4691 (home)
(603) 623-3330 (work)
XLISP is an experimental programming language combining some
of the features of LISP with an object oriented extension
capability. It was implemented to allow experimentation
with object oriented programming on small computers. There
are currently implementations running on the PDP-11 under
RSX-11, RT-11, and UNIX V7, on the VAX-11 under VAX/VMS and
Berkeley VAX/UNIX, on the Z-80 under CP/M-80, on the Z8000
under UNIX V7, and on the 8088/8086 under CP/M-86 or MS-DOS.
A version is currently being developed for the 68000 under
CP/M-68K. It is completely written in the programming
language 'C' and is easily extended with user written
built-in functions and classes. It is available in source
form free of charge to non-commercial users. Prospective
commercial users should contact the author for permission to
use XLISP.
Version 1.2 of XLISP differs from version 1.1 in several
ways. It supports many more Lisp functions. Also, many
version 1.1 functions have been renamed and/or changed
slightly to follow traditional Lisp usage. One of the most
frequently reported problems in version 1.1 resulted from
many functions being named after their equivilent functions
in the C language. This turned out to be confusing for
people who were trying to learn XLISP using traditional LISP
texts as references. Version 1.2 renames these functions to
be compatible with more traditional dialects of LISP.
A recommended text for learning LISP programming is the book
"LISP" by Winston and Horn and published by Addison Wesley.
The first edition of this book is based on MacLisp and the
second edition is based on Common Lisp. Future versions of
XLISP will migrate towards compatiblility with Common Lisp.
<form-feed>
Page 2
XLISP version 1.2 functions:
Evaluator functions
(eval <expr>) EVALUATE AN XLISP EXPRESSION
(apply <fun> <args>) APPLY A FUNCTION TO A LIST OF ARGUMENTS
(funcall <fun> <arg>...) CALL A FUNCTION WITH ARGUMENTS
(quote <expr>) RETURN AN EXPRESSION UNEVALUATED
Symbol functions
(set <sym> <expr>) SET THE VALUE OF A SYMBOL
(setq <sym> <expr>) SET THE VALUE OF A SYMBOL
(defun <sym> <fargs> <expr>...) DEFINE A FUNCTION WITH EVALUATED ARGS
(ndefun <sym> <fargs> <expr>...) DEFINE A FUNCTION WITH UNEVALUATED ARGS
(gensym <tag>) GENERATE A SYMBOL
(intern <sym>) INTERN A SYMBOL ON THE OBLIST
(get <sym> <prop>) GET THE VALUE OF A PROPERTY
(putprop <sym> <value> <prop>) PUT A PROPERTY ONTO A PROPERTY LIST
(remprop <prop> <sym>) REMOVE A PROPERTY
List functions
(car <expr>) RETURN THE CAR OF A LIST NODE
(cdr <expr>) RETURN THE CDR OF A LIST NODE
(caar <expr>) == (car (car <expr>))
(cadr <expr>) == (car (cdr <expr>))
(cdar <expr>) == (cdr (car <expr>))
(cddr <expr>) == (cdr (cdr <expr>))
(cons <expr1> <expr2>) CONSTRUCT A NEW LIST NODE
(list <expr>...) CREATE A LIST OF VALUES
(append <expr>...) APPEND LISTS
(reverse <expr>) REVERSE A LIST
(last <list>) RETURN THE LAST LIST NODE OF A LIST
(member <expr> <list>) FIND AN EXPRESSION IN A LIST
(memq <expr> <list>) FIND AN EXPRESSION IN A LIST
(assoc <expr> <alist>) FIND AN EXPRESSION IN AN ASSOCIATION LIST
(assq <expr> <alist>) FIND AN EXPRESSION IN AN ASSOCIATION LIST
(length <expr>) FIND THE LENGTH OF A LIST
(nth <n> <list>) RETURN THE NTH ELEMENT OF A LIST
(nthcdr <n> <list>) RETURN THE NTH CDR OF A LIST
(mapcar <fcn> <list1>...<listn>) APPLY FUNCTION TO SUCCESSIVE CARS
(maplist <fcn> <list1>...<listn>) APPLY FUNCTION TO SUCCESSIVE CDRS
(subst <to> <from> <expr>) SUBSTITUTE ONE EXPRESSION FOR ANOTHER
(sublis <alist> <expr>) SUBSTITUTE USING AN ASSOCIATION LIST
Destructive list functions
(rplaca <list> <expr>) REPLACE THE CAR OF A LIST NODE
(rplacd <list> <expr>) REPLACE THE CDR OF A LIST NODE
(nconc <list>...) DESTRUCTIVELY CONCATENATE LISTS
(delete <expr> <list>) DELETE OCCURANCES OF AN EXPRESSION FROM A LIST
(delq <expr> <list>) DELETE OCCURANCES OF AN EXPRESSION FROM A LIST
<form-feed>
Page 3
Predicate functions
(atom <expr>) IS THIS AN ATOM?
(symbolp <expr>) IS THIS A SYMBOL?
(numberp <expr>) IS THIS A NUMBER?
(null <expr>) IS THIS AN EMPTY LIST?
(not <expr>) IS THIS FALSE?
(listp <expr>) IS THIS A LIST?
(consp <expr>) IS THIS A NON-EMPTY LIST?
(boundp <sym>) IS THIS A BOUND SYMBOL?
(eq <expr1> <expr2>) ARE THE EXPRESSIONS IDENTICAL?
(equal <expr1> <expr2>) ARE THE EXPRESSIONS EQUAL?
Control functions
(cond <pair>...) EVALUATE CONDITIONALLY
(let (<binding>...) <expr>...) BIND SYMBOLS AND EVALUATE EXPRESSIONS
(and <expr>...) THE LOGICAL AND OF A LIST OF EXPRESSIONS
(or <expr>...) THE LOGICAL OR OF A LIST OF EXPRESSIONS
(if <texpr> <expr1> [<expr2>]) EXECUTE EXPRESSIONS CONDITIONALLY
(progn <expr>...) EXECUTE EXPRESSIONS SEQUENTIALLY
(while <texpr> <expr>...) ITERATE WHILE AN EXPRESSION IS TRUE
(repeat <iexpr> <expr>...) ITERATE USING A REPEAT COUNT
Arithmetic functions
(+ <expr>...) ADD A LIST OF NUMBERS
(- <expr>...) SUBTRACT A LIST OF NUMBERS
(* <expr>...) MULTIPLY A LIST OF NUMBERS
(/ <expr>...) DIVIDE A LIST OF NUMBERS
(1+ <expr>) ADD ONE TO A NUMBER
(1- <expr>) SUBTRACT ONE FROM A NUMBER
(rem <expr>...) REMAINDER OF A LIST OF NUMBERS
(minus <expr>) NEGATE A NUMBER
(min <expr>...) THE SMALLEST OF A LIST OF NUMBERS
(max <expr>...) THE LARGEST OF A LIST OF NUMBERS
(abs <expr>) THE ABSOLUTE VALUE OF A NUMBER
Bitwise boolean functions
(& <expr>...) THE BITWISE AND OF A LIST OF NUMBERS
(| <expr...) THE BITWISE OR OF A LIST OF NUMBERS
(~ <expr>) THE BITWISE NOT OF A NUMBER
Relational functions
(< <e1> <e2>) TEST FOR LESS THAN
(<= <e1> <e2>) TEST FOR LESS THAN OR EQUAL TO
(= <e1> <e2>) TEST FOR EQUAL TO
(/= <e1> <e2>) TEST FOR NOT EQUAL TO
(>= <e1> <e2>) TEST FOR GREATER THAN OR EQUAL TO
(> <e1> <e2>) TEST FOR GREATER THAN
<form-feed>
Page 4
String functions
(strcat <expr>...) CONCATENATE STRINGS
(strlen <expr>) COMPUTE THE LENGTH OF A STRING
(substr <expr> <sexpr> [<lexpr>]) EXTRACT A SUBSTRING
(ascii <expr>) NUMERIC VALUE OF CHARACTER
(chr <expr>) CHARACTER EQUIVALENT OF ASCII VALUE
(atoi <expr>) CONVERT AN ASCII STRING TO AN INTEGER
(itoa <expr>) CONVERT AN INTEGER TO AN ASCII STRING
I/O functions
(read [<source> [<eof>]]) READ AN XLISP EXPRESSION
(print <expr> [<sink>]) PRINT A LIST OF VALUES ON A NEW LINE
(prin1 <expr> [<sink>]) PRINT A LIST OF VALUES
(princ <expr> [<sink>]) PRINT A LIST OF VALUES WITHOUT QUOTING
(terpri [<sink>]) TERMINATE THE CURRENT PRINT LINE
(flatsize <expr>) LENGTH OF PRINTED REPRESENTATION USING PRIN1
(flatc <expr>) LENGTH OF PRINTED REPRESENTATION USING PRINC
(explode <expr>) CHARACTERS IN PRINTED REPRESENTATION USING PRIN1
(explodec <expr>) CHARACTERS IN PRINTED REPRESENTATION USING PRINC
(maknam <list>) BUILD AN UNINTERNED SYMBOL FROM A LIST OF CHARACTERS
(implode <list>) BUILD AN INTERNED SYMBOL FROM A LIST OF CHARACTERS
(openi <fname>) OPEN AN INPUT FILE
(openo <fname>) OPEN AN OUTPUT FILE
(close <fp>) CLOSE A FILE
(tyi [<source>]) GET A CHARACTER FROM A FILE OR STREAM
(tyipeek [<source>]) PEEK AT THE NEXT CHARACTER FROM A FILE OR STREAM
(tyo <ch> [<sink>]) PUT A CHARACTER TO A FILE OR STREAM
(readline [<source>]) READ A LINE FROM A FILE OR STREAM
System functions
(load <fname>) LOAD AN XLISP SOURCE FILE
(gc) FORCE GARBAGE COLLECTION
(expand <num>) EXPAND MEMORY BY ADDING SEGMENTS
(alloc <num>) CHANGE NUMBER OF NODES TO ALLOCATE IN EACH SEGMENT
(mem) SHOW MEMORY ALLOCATION STATISTICS
(type <expr>) RETURNS THE TYPE OF THE EXPRESSION
(exit) EXIT XLISP