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) (AND (EVAL (CADR X)) ((LAMBDA (OBARRAY READTABLE ^Q ^W) (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) (GET 'READTABLE '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)))) (READ)) ***** 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 (DEFUN +INTERNAL-AUTOLOAD (X) (APPLY (FUNCTION FASLOAD) (CDR X))) 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. THE ; READ-MACRO FUNCTION IS NOW MORE CLEVER ABOUT THE SITUATION WHERE IT HITS THE END OF A FILE BEFORE FINDING A CARRIAGE RETURN.