Thursday June 07,1979 FQ+5D.11H.58M.56S. - Jonl - 1) Value of "MAKHUNK" permits use of a new HUNK2 space. 2) HUNKs now have a PRINT syntax, and can be FASLOADed 3) Added comma syntax for backquote selects NCONC rather than APPEND 4) Backquote macro permits "grindef"ing in format exactly as read in. 5) The famous but Kludgy Binford Editor is now autoloadable. 6) Remaining hooks into TOPLEVEL/BREAK loop 7) LAST-MACROEXPANDED-LOSER is gone. 8) RPLACX now is open-coded by COMPLR (in the same way that CXR is) 9) New compiler switch: HUNK2-TO-LIST, with switch letter "2". _______________________________________________________________________ 1) Value of "MAKHUNK" permits use of a new HUNK2 space. The value of the special variable MAKHUNK controls whether hunks of size 1 and 2 are stored in LIST space, or in a HUNK2 space. MAKHUNK = T says use HUNK2; initial setting is MAKHUNK = T. The compiler will rewrite forms like "(HUNK x)" and "(HUNK x y)" into appropiate calls to NCONS or CONS, depending on the value of the new compiler switch "HUNK2-TO-LIST" - see the comment below. 2) HUNKs now have a PRINT syntax, and can be FASLOADed When "MAKHUNK" is non-null, certain formats will be recognized by the reader as presenting HUNKs; when "MAKHUNK" is null, these formats will be treated as previously, namely erroneous. Any "S-expression" presented like a list, but with more than one dot, or with a dot immediately before the final parens, will be read-in as a HUNK. E.g. (A . B . C), (A . B .) as well as (A .) PRINT will always put the dot before the final parens. FASLAP can output hunks, in case any should be incorporated into your expr code; and FASLOAD can load them back in. 3) Added comma syntax for backquote selects NCONC rather than APPEND The form ",." in addition to ",@" is recognized by the backquote feature. ",." selects NCONC instead of APPEND, and thus we have `(,@B C) generates (APPEND B '(C)) `(,.B C) generates (NCONC B '(C)) [This idea, for ",." comes from RBR] 4) Backquote macro permits "grindef"ing in format exactly as read in. The "backquote" macro now has the option of generating "macroified" code, with the name |`-expander/|| as a primary eval-time macro. This option will be exercised if BACKQUOTE-EXPAND-WHEN is "EVAL" (or in general anything except "READ"), and otherwise the expansion will occur at read-in time just as at present. Three other internal markers are added: |`,/|| |`,@/|| and |`,./||. GRINDEF would print out a form just like it was read-in, using the READMACROINVERSE feature; however, there is a flaw in this feature in that readmacros won't appear in the CDR part of a list; thus you never see '(A . 'B) grindef'd out that way. For the same reason, it would be somewhat of a pain to get `(A . ,B) to grindef out that way, but `(A ,@B) and `(A ,.B) both win. Note the weird commutation: `(A . ,B) works the same as `(A ,. B) ?? All the aforesaid "markers" and macros are on the obarray, so that any PRINTing or GRINDEFing (regardless of the success of the READMACROINVERSE attempts) would be readable back in with no loss of functionality. All such markers (and other parts of this feature) are automatically autoloaded. 5) The famous but Kludgy Binford Editor is now autoloadable. Thus it is no longer part of the initial ITS maclisp environment. REMEMBER: holds the last thing killed holds the "back-upwards" list ^^^ holds the "back-leftwards" list EDIT hold a list of the names for "editible" properties "S", that is the search command, with no trailing arguments, means to search again for the same thing as before. Both "S" and "I" take arbitrarily many trailing arguments, terminated by <alt-mode><altmode><space> Also, any symbol with an EDIT property may be an edit command, wherein the function stored under the EDIT property is applied to a number: 0 means no numeric arg to function n > 0 is the numeric argument given to the command 6) Remaining hooks into TOPLEVEL/BREAK loop The following special global variables are now in the system, and they also have respectively a SUBR property corresponding to the system-supplied code for the parallel top-level operations: READ-EVAL-*-PRINT for "prin1" part of the loop, subr of 1 arg READ-EVAL-PRINT-* for "terpri" part of the loop, subr of 0 args *-READ-EVAL-PRINT for "read" part of the loop, subr of 0 args READ-*-EVAL-PRINT for "eval" part of the loop, subr of 1 arg The "LISP RECENT" note of May 15,1978 mentioned two of these as "hooks" into the TOPLEVEL/BREAK loop; the number of these hooks is thus now extended to include the full set possible. Recall that each such function "intercepts" the TOPLEVEL/BREAK loop at the point of the "*" in its PNAME. Thus one pass through the loop would look essentially like: (AND *-READ-EVAL-PRINT (FUNCALL *-READ-EVAL-PRINT)) ;"intercept" (SETQ * (*-READ-EVAL-PRINT) ;TOP-LEVEL-READ (AND READ-*-EVAL-PRINT (FUNCALL READ-*-EVAL-PRINT *)) ;"intercept" (SETQ * (READ-*-EVAL-PRINT *)) ;TOP-LEVEL-EVAL (AND READ-EVAL-*-PRINT (FUNCALL READ-EVAL-*-PRINT *)) ;"intercept" (READ-EVAL-*-PRINT *) ;TOP-LEVEL-PRINT (AND READ-EVAL-PRINT-* (FUNCALL READ-EVAL-PRINT-*)) ;"intercept" (READ-EVAL-PRINT-*) ;TOP-LEVEL-TERPRI 7) LAST-MACROEXPANDED-LOSER is gone. It used to do something in macros defined by DEFMACRO. 8) RPLACX now is open-coded by COMPLR (in the same way that CXR is) 9) New compiler switch: HUNK2-TO-LIST, with switch letter "2". causes "(HUNK x)" to compile like "(NCONS x)", and "(HUNK x y)" to compile like "(CONS x y)". Initial setting is (), so that hunk calls are output; in the object environment, a hunk call may actually produce a list cell if MAKHUNK is null.