9/15/73  GLS, AND JONL

BRIEF SYNOPSIS:
1) NEW FUNCTIONS PROGN AND FUNCALL
2) THE FUNCTION BREAK EXPLAINED
3) NUMBERS ARE ACCEPTABLE AS PROG TAGS
4) MORE EXTENSIONS FOR USERS OF LOWER-CASE CHARS.
5) SOME REMINDERS OF IMPORTANT THINGS ALREADY KNOWN
6) A FEW MORE ARCANE DETAILS ABOUT THE EVALUATOR.

1)
LISP NOW HAS TWO MORE FUNCTIONS:
[1] PROGN, AN LSUBR OF 0 OR MORE ARGS, WHICH (ODDLY ENOUGH)
RETURNS ITS LAST ARGUMENT (NIL IF NO ARGS).
[2] FUNCALL, AN LSUBR OF 1 OR MORE ARGS. (FUNCALL F X1 X2 ... XN)
CALLS THE FUNCTION F WITH ARGUMENTS X1, X2, ... XN.
THIS IS USEFUL IN SITUATIONS WHERE ONE WANTS TO EVALUATE
SOME EXPRESSION TO OBTAIN THE FUNCTION. THUS
(FUNCALL (CAR X) A B C) IS SIMILAR TO ((CAR X) A B C)
BUT LOOKS NICER. ITS PRIMARY USE IS IN THE CASE WHERE
SOME VARIABLE HAS A FUNCTION AS ITS VALUE, BUT MAYBE ALSO
HAS A FUNCTION PROPERTY. EXAMPLE:
((LAMBDA (CAR) (CAR X)) 'FOO)
RETURNS THE RESULT OF APPLYING THE FUNCTION CAR TO THE
VALUE OF X; HOWEVER
((LAMBDA (CAR) (FUNCALL CAR X)) 'FOO)
RETURNS THE RESULT OF APPLYING THE FUNCTION FOO TO X.

********* INVALIDATED 1 NOV 1973.  (SSTATUS BREAKLOOP) HAS BEEN FLUSHED ******
2)  (SSTATUS BREAKLOOP <FORM>) IS SIMILAR TO (SSTATUS TOPLEVEL <FORM>)
TOP LEVEL. (ISN'T THAT AMAZING!)
(STATUS BREAKLOOP), ODDLY ENOUGH, RETURNS THE FORM CURRENTLY
BEING USED FOR BREAKLOOPS. NIL INDICATES THAT THE
STANDARD BREAK LOOP IS TO BE USED.
A NEAR APPROXIMATION TO THE ACTION OF BREAK, AND ITS INTERACTION
WITH THE FORM SPECIFIED BY (STATUS BREAKLOOP) IS
(DEFUN BREAK FEXPR (X)
(PRINC '/;BKPT/ )
(PRINC (CAR X))
(TERPRI)
(PROG (V)
A   (AND (NULL (SETQ V (ERRSET (DO NIL (NIL) (EVAL BLF)))))
(GO A))
(TERPRI)
(RETURN (COND ((EQ V INTERNAL-UNBOUND)
(AND (CDDR X) (EVAL (CADDR X))))
(V)))))
(GET 'OBARRAY 'ARRAY)
NIL
NIL)))
BLF IS THE BREAK LEVEL FORM, AND IS WHAT IS SET BY
(SSTATUS BREAKLOOP BLF).  THE DEFAULT VALUE IS SOMETHING LIKE
((LAMBDA (Z)
(COND ((EQ Z 'P) (ERR INTERNAL-UNBOUND))
((EQ (CAR Z) 'RETURN) (ERR (EVAL (CADR Z))))
(T (PRINT (EVAL Z)) (TERPRI))))
***** END OF INVALIDATED SECTION *****
***** CESSATION OF INVALIDATION  *****
***** COMPLETION OF DELETION     *****

3) FIXNUMS AND FLONUMS MAY NOW BE USED AS PROG TAGS; THUS
(PROG (YX)
(FOO X)
-2   (BAR X)
4.72 (OR X (GO -2))
(OR YX (GO 4.7))
(RETURN '(GO S ARE HAZARDOUS TO YOUR PROGRAMS)))
WILL WORK PERFECTLY WELL.   HOWEVER, BIGNUMS DO NOT WORK AS PROG TAGS.

4) MORE TRIUMPHS FOR LOWER CASE:
[ONE] VALRET NOW KNOWS ABOUT :KILL WRITTEN IN LOWER CASE
AS WELL AS UPPER CASE. IN EITHER CASE, WHEN ALL
A VALRET STRING SAYS IS :KILL, THEN A .BREAK 16,120000
IS DONE INSTEAD OF A VALRET.
[TWO] THE READER NOW ALLOWS LOWER-CASE LETTERS AS
SUPRA-DECIMAL DIGITS AS WELL AS UPPER CASE WHEN
(SSTATUS + T) IS DONE.

5) REMEMBER THIS!
A WARNING TO USERS OF PUTPROP, REMPROP, ARGS, ETC:
IN CERTAIN RESTRICTED CASES, THESE FUNCTIONS WILL COPY
THE TOP LEVEL OF THE MENTIONED ATOM'S PROPERTY LIST. THIS HAPPENS
IN THE CASE WHERE ALL OR PART OF THE PROPERTY LIST LIES IN A PURE
(READ-ONLY) AREA OF MEMORY; IN PARTICULAR, THIS FACT IS TRUE OF
ATOMIC SYMBOLS ASSEMBLED INTO THE SYSTEM, LIKE CAR AND LAMBDA.

IF YOU FASLOAD IN A FILE WHICH REDEFINES MANY FUNCTIONS
(LIKE LOADING IN A FILE TWICE OR SOMETHING!) AND YOU GET TIRED
OF ALL THE WARNING MESSAGES, TRY SAYING (SETQ FASLOAD NIL), WHICH
WILL TURN OFF THE MESSAGES.  THIS CAN BE DONE IN THE MIDDLE OF A
FASLOAD FROM A ^H BREAK.  (SETQ FASLOAD T) TURNS THEN BACK ON AGAIN.

6) SOME REMNANTS:

(STATUS RCT ...) AND (SSTATUS RCT ...) HAVE DISAPPEARED.

IN *RSET MODE, THE FUNCTION STORE TRIES TO BE CLEVER ABOUT
CHECKING ITS FIRST ARGUMENT TO MAKE SURE IT IS INDEED AN
ARRAY CALL: ITS FIRST ARGUMENT SHOULD BE OF THE FORM
(A X1 X2 ... XN) WHERE A HAS AN ARRAY PROPERTY OR HAS
AS ITS VALUE AN ATOM WITH AN ARRAY PROPERTY.
IF THESE CONDITIONS ARE NOT MET, STORE MAY BARF AT YOU.
(THEN AGAIN, MAYBE NOT). STORE IS ALSO CLEVER ABOUT
FORMS LIKE (STORE (FUNCALL A X1 ... XN) Y)   AND
(STORE (B X1 X2 . . . XN))
WHERE B HAS A MACRO PROPERTY.  TO AVOID TRAPS OF AMBIGUITY,
ESPECIALLY DURING COMPILATION, USE THE FUNCALL CONSTRUCT
FOR "VARIABLE" ARRAYS.

CALLS FROM COMPILED CODE, AND ANY OTHER USAGE OF THE CALL UUO, WILL
PREFER ORDINARY FUNCTIONAL PROPERTIES TO ANY MACRO PROPERTY WHEN
TRYING TO FIND THE FUNCTION DEFINITION FOR AN ATOM.  IF A CALLED ATOM
HAS ONLY A MACRO PROPERTY, THEN AN UNDF-FNCTN ERROR INTERRUPT WILL
HAPPEN.

THE AUTOLOAD MECHANISM DESCRIBED EARLIER IS ACTUALLY MORE
COMPLICATED THAN PREVIOUSLY ADVERTISED. THIS IS HOW IT REALLY
WORKS: IF EVAL, APPLY, OR THE UUO HANDLER IS HANDED AS A FUNCTION
SOME ATOMIC SYMBOL WHOSE PROPERTY LIST HAS AN AUTOLOAD
PROPERTY (AND NO OTHER FUNCTIONAL PROPERTY
IS AHEAD OF IT ON THE PROPERTY LIST), THEN USER INTERRUPT
NUMBER 18. (THAT'S EIGHTEEN DECIMAL) IS INVOKED; AS ITS SINGLE
ARGUMENT THE INTERRUPT FUNCTION IS HANDED A DOTTED PAIR WHOSE
CAR IS THE ATOMIC SYMBOL AND WHOSE CDR IS THE AUTOLOAD PROPERTY
(JUST TO MAKE THINGS EASY). INITIALLY, THE HANDLER FOR INTERRUPT 18.
IS SOMETHING LIKE
AS AND WHEN THE INTERRUPT HANDLER DECIDES TO RETURN, IT
DARN WELL BETTER HAVE STUCK SOME OTHER KIND OF FUNCTION PROPERTY
ON THE PROPERTY LIST OF THE ATOMIC SYMBOL! (IT IS NOT
NECESSARY TO REMPROP THE AUTOLOAD PROPERTY, SO LONG AS THE
OTHER ONE COMES FIRST ON THE PROPERTY LIST.) IS THE INTERRUPT
HANDLER FAILS TO DO THIS, AN UNDF-FNCTN INTERRUPT WILL HAPPEN,
WITH A MESSAGE LIKE "FUNCTION UNDEFINED AFTER AUTOLOAD".

MAKUNBOUND HAS BEEN CHANGED SLIGHTLY FOR COMPATIBILITY:
IT NOW RETURNS ITS ARGUMENT, RATHER THAN RETURNING
THE INTERNAL UNBOUND MARKER.