JONL 3/22/73
1) THE CONTROL CHARACTERS ^P AND ^U NO LONGER ARE RELEVANT TO
THE INTERPRETIVE PLOTTER: ^P IS NOT USED, AND ^U IS NOW USED FOR
THE PAGEPAUSER DESCRIBED BELOW. THE PLOTTER MAY BE CLOSED AND
RELEASED BY EXECUTING (PLOT 0), AND ANY OTHER PLOTTER REQUEST
WILL SIEZE AND OPEN UP THE PLOTTER OF IT IS NOT ALREADY OPEN.
2) (SSTATUS PAGEPAUSE T) WILL TURN ON AN INTERESTING MODE FOR LISP
USERS LOGGED IN FROM DISPLAY CONSOLES. NIL INSTEAD OF T REVERTS
TO THE STANDARD MODE. (STATUS PAGEPAUSE) INTERROGATES THE FLAG.
(STATUS SYSTEM X) ASSUMES THAT X IS AN ATOM, AND RETURNS A LIST
OF PROPERTIES [EXCEPT PNAME] THAT ARE ON THE ATOM AT LISP LOAD
TIME. THUS, SINCE "ALARMCLOCK" IS A SYSTEM SUBR, AND ALSO A
TOP-LEVEL GLOBAL VARIABLE:
(STATUS SYSTEM 'ALARMCLOCK) = (VALUE SUBR)
3) THREE NEW FUNCTIONS. IN THE FOLLOWING, LET X AND Y BE
PNAME-TYPE ATOMS, AND N BE A FIXNUM:
(ALPHALESSP X Y) RETURNS T IF X PRECEEDS Y IN THE ASCII LEXICAL
ORDERING. NIL OTHERWISE.
(GETCHAR X N) RETURNS THE NTH CHARACTER OF THE PNAME OF X.
(SAMEPNAMEP X Y) RETURNS T IF X AND Y HAVE THE SAME PNAME
[IF (SAMEPNAMEP X Y) = T, AND (EQ X Y) = NIL,
THEN X AND Y CAN'T BOTH BE ON A GIVEN OBARRAY].
4) HASH-CODING. TO FACILITATE HASHCODING SCHEMES FOR S-EXPRESSIONS,
THE FUNCTION SXHASH HAS BEEN WRITTEN: (SXHASH FOO) WILL PRODUCE A
35.-BIT SIGNED INTEGER FOR ANY S-EXPRESSION FOO, AND ANY TWO EQUAL
EXPRESSIONS WILL SXHASH TO THE SAME NUMBER. IT WOULD BE A VERY
GOOD IDEA FOR USERS WHO WANT TO WRITE THEIR OWN HASHING FUNCTIONS
TO DEFINE THEM IN TERMS OF THE RESULTS FROM SXHASH, AND DEFINITELY
NOT IN TERMS OF THE "POINTER" FOR THE S-EXPRESSION. FOR EXAMPLE,
TO HAVE A TABLE OF S-EXPRESSIONS ONE COULD WRITE:
(DEFUN KNOWNP (X)
(PROG (I BKT)
(SETQ I (PLUS 76 (REMAINDER (SXHASH X) 77)))
;THE REMAINDER SHOULD BE REASONABLY RANDOMIZED BETWEEN
;-76 AND 76, THUS TABLE SIZE MUST BE > 175
(SETQ BKT (TABLE I))
;BKT IS THUS A LIST OF ALL THOSE EXPRESSIONS THAT HASH
;INTO THE SAME NUMBER AS DOES X
(RETURN (MEMQ X BKT))))
TO WRITE AN "INTERN" FOR SEXPRESSIONS, ONE COULD THUS DO
(DEFUN SINTERN (X)
(PROG (BKT I TEM)
(SETQ BKT (TABLE (SETQ I (+ 2N-2 (\ (SXHASH X) 2N-1)))))
;2N-1 AND 2N-1 STAND FOR A POWER OF 2 MINUS ONE AND
;MINUS TWO RESPECTIVELY. THIS IS A GOOD CHOICE TO
;RANDOMIZE THE RESULT OF THE REMAINDER OPERATION
(RETURN (COND ((SETQ TEM (MEMBER X BKT))
(CAR TEM))
(T (STORE (TABLE I) (CONS X BKT))
X)))))
SEVERAL INCARNATIONS OF LISP FOLLOW THE "RELOCATING" GARBAGE-
COLLECTOR STRATEGY, AND IN THESE LISPS THE ADDRESS, OR "POINTER"
FOR A GIVEN S-EXPRESSION WILL CHANGE AFTER A GC. THUS TRYING TO
REWRITE KNOWNP AS
(DEFUN KNOWNP (X)
(PROG (I II)
(SETQ II (SETQ I (\ (MAKNUM X) 2N-1)))
A (COND ((EQ (TABLE I) X) (RETURN T))
((< (SETQ I (1+ I)) 2N-1) (GO A)))
(SETQ I -1)
B (COND ((NOT (< (SETQ I (1+ I)) II)) (RETURN NIL))
((EQ (TABLE I) X) (RETURN T))
(T (GO B)))))
WILL SURELY LEAD TO MUCH GRIEF.
5) IT HAS COME TO MY ATTENTION THAT MANY PERSONS ARE USING THE ERRLIST
AS A MEANS FOR REDEFINING THE TOP LEVEL FUNCTION. ONE MUST BE
CAREFUL TO PLACE ERRSETS AROUND ANY COMPUTATIONS ON THE ERRLIST
THAT MIGHT CONCEIVABLY LEAD TO BOMB-OUT ERRORS, FOR OTHERWISE,
THE LISP MAY GET INTO AN INFINITE LOOP OF ERRORS. TO ENCOURAGE THE
USE OF THE MACLISP TOPLEVEL FEATURE, THE TOPLEVEL FUNCTION HAS BEEN
SLIGHTLY REVISED AS FOLLOWS:
(PROG ()
B (ERRSET
(PROG ()
(SETQ ^R NIL) ;IN ADDITION, MANY OTHER INTERNAL
;VARIABLES ARE RESET TO TOP LEVEL
;SETTINGS, INCLUDING PDL POINTERS,
;FLAGS ETC.
(MAPC 'EVAL ERRLIST)
(SETQ * '*)
A (SETQ * (COND ((STATUS TOPLEVEL)
(EVAL (STATUS TOPLEVEL)))
(T (PRINT *) ;CYCLING THRU THE LOOP
(TERPRI) ;IS ESSENTIALLY PRINT
(EVAL (READ))))) ;OF EVAL OF READ
(GO A)))
(GO B)) ;IF ERROR OCCURS, RESTART AT B INSTEAD OF A
7) SETTING THE VALUE OF THE VARIABLE "SPECIAL" TO NON-NIL IN THE
COMPLR WILL CAUSE EVERY VARIABLE TO BE AUTOMATICALLY DECLARED
SPECIAL. THIS WILL TAKE THE HEAT OFF THE POOR LOSER WHO TRIES TO
COMPILE SOMEONE ELSE'S PROGRAM WITHOUT ACTUALLY UNDERSTANDING THE
OTHER'S PROGRAM. HOWEVER, IT SHOULD BE NOTED THAT SOME
REPRESENTATIVE, SAMPLE LISP PROGRAMS HAVE BEEN OBSERVED TO REQUIRE
40% MORE RUNNING TIME IF COMPILED FOR ALL VARIABLES BEING SPECIAL
THAN IF COMPILED WITH JUDICIOUS USE OF SPECIALIZATION.
8) (TYIPEEK T) HAS BEEN SLIGHTLY EXTENDED SO THAT ANY SPLICING MACRO
CHARACTERS OCCURING AT TOP-LEVEL READ WILL BE EXECUTED, AND THEN
TYIPEEK SCANNING CONTINUED. THIS IS TO ALLOW MACROS LIKE
SEMI-COLON TO DISPOSE OF THEIR COMMENT CHARACTERS, AND IS
FAIL-SAFE FOR READ, SINCE READ WOULD ONLY DO THE SAME THING
[IE, EXECUTE THE SPLICING MACRO FUNCTION, AND TOSS OUT THE RESULT.]