kend@dadlaa.UUCP (Ken Dickey) (01/08/85)
iLISP is a lexically scoped lisp based on the SCHEME dialect of Lisp which runs on Z80 CP/M 2.X I have been going through some of the exercises from Abelson & Sussmans' STRUCTURE AND INTERPRETATION OF COMPUTER PROGRAMS (MIT Press '85)--which is an excellent book--and having a lot of fun doing so. For $55, this is a really fun system for playing with objects, packages, constraint systems, etc. There are some differences in this dialect and that described in Struct & Interp, but I have yet to come across something I couldn't do in a clean and obvious way. Synopsis: Just like the big boys: read and run time macros, optimized tail recursion (does not burn stack space; no [ugly] PROG or GO needed), error handling and toploop fully user controlled, init (startup) file, assembler interface, CATCH, floating point math, CP/M access, assembler interface, list editor, TRACEing, BREAK, user control of error handling, ramdom access function library system (most convenient!), pretty printing functions, readable reference manual (165 pg, + 60 pg intro for non-lispers), terminal configuration options, full control of string and cons space allocation, etc, etc. Aside from this it is jus' plain fun to use (this is NOT a paid ad, really)!. Warning: the intro for beginners is much too formal. The Struct & Interp is a much better introduction for new lispers, who may need some hand- holding in any case. Unfortunately, no vectors or compilation. general prims: + - * / ABS ADD1 ARCTAN COSINE FIX FLOAT MINUS REM SINE SUB1 SQRT APPEND CAR CARS CDR CDRS CONS COPY DREVERSE LAST LENGTH LIST MEMB MEMBER NCONC NTH REPLACA REPLACD REPLACAD TCONC GETPL GETPROP LISTGET LISTPUT LISTREM PUTPROP REMPROP SETPL ALPHAORDER NCHARS PACK SET UNPACK UNSET ATOM EQ EQUAL LISTP LITATOM MACROP NULL NUMNBERP PROPP VALUEP ZEROP = >= <= > < i/o and special prims: CLEARBUF DIRIO FILLBUF INB INPUT PEEKC READ READP READC READLINE SYNTAB SYNTAX CS CURSOR LINELENGTH MARGIN OUTB OUTPUT POSITION PRIN1 PRIN2 PRINTLEVEL PRINT OUTB SPACES TAB CLOSE DISK DSKRES FILEDIR GFD IOBYTE OPEN OPENP SFP ARGCNT ASCII BYTE CHAR ERR EVAL DEFEXP DESCRIBE EXIT FREE FULL LOAD MEMORY PROG1 RECLAIM RESET MAP TERPRI TYPE UNSETF also has a number of macros and special forms (MAP functions, PROGN, DEFINE, SETQ, SELECTQ, COND, LET, LETSYS, etc) and a bunch of utility functions (string handling, statistics, Eliza, etc). There is more, but I'm tired of typing and you get the idea. As functions are full-fledged data objects, they can be assigned to, allowing you to do things like generalize "+" to lists, eg: (SETQ OLD-ADD +) ; expects 2 args (DEFINE + ARGS (MAP ID ARGS OLD-ADD 0)) (UNSET 'OLD-ADD) will now allow (+ 4 3 6) =>13 instead of an error (2 args expected) and (+ ) =>0. Oh, yes: COMPUTING INSIGHTS PO BOX 4033 Madison, Wisconsin 53711 ($49.95 + $5 ship) Lithp ith lithening! -Ken Dickey --------------------------------------------------- UUCP: HOST!tektronix!dadla!kend Where HOST is any one of: masscomp,decvax,allegra,uf-cgrl,mit-eddie,mit-ems, uoregon,psu-cs,orstcs,zehntel,ucbcad,ucbvax,purdue, uw-beaver,reed, ogcvax,ihnp4,tekred,minn-ua,cbosg CSnet: kend%dadla@tektronix ARPAnet: kend%dadla%tektronix@csnet-relay ---------------------------------------------------