3/1/69 JONL

 THE CURRENT VERSION OF LISP, "LISP 102", HAS
THE FOLLOWING AS-YET UNDOCUMENTED FEATURES:

	1)"DEFUN" IS AN FSUBR USED TO DEFINE
FUNCTIONS. EXAMPLES ARE
	(DEFUN ONECONS (X) (CONS 1 X))
WHICH IS EQUIVALENT TO 
	(DEFPROP ONECONS 
		(LAMBDA (X) (CONS 1 X)
	 EXPR)

AND (DEFUN SMASH FEXPR (L) (RPLACD L NIL))
 IS EQUIVALENT TO
	(DEFPROP SMASH 
		(LAMBDA (L) (RPLACD L NIL))
	 FEXPR)
THE NOVEL FEATURE OF "DEFUN" IS THAT ONE NEED
 NOT BE SO CONCERNED WITH BALANCING
PARENTHESES AT THE VERY END OF THE FUNCTION
DEFINITION, SINCE THE TYPE FLAG MAY BE 
OMITTED IF IT IS "EXPR", AND APPEARS NEAR 
THE FRONT OF THE "DEFUN" LIST IF IT IS SOME 
OTHER.  ALSO, THE "LAMBDA" NEED NOT BE 
DIRECTLY INSERTED.

	2)A FAST "DO" SIMILAR TO THE FORTRAN
DO FEATURE NOW EXISTS.  THE SYNTAX IS
	(DO ATOM INITIALVALUE STEPFUN ENDTEST
		STATEMENT1
		.
		.
		.
		STATEMENTN)
WHERE "ATOM" IS THE INDEX VARIABLE
OF THE LOOP, WHICH IS INITIALLY SET TO THE
EVALUATION OF "INITIALVALUE", AND IS RESET
EACH PASS THROUGH THE LOOP TO THE EVALUATION
OF "STEPFUN".  "STATEMENT1" TO "STATEMENTN"
COMPRISE A REGULAR PROG BODY (EXCEPTING THE
LIST OF PROG VARIABLES) WHICH IS EXECUTED
REPEATEDLY UNTIL "ENDTEST" EVALUATES TO 
NON-NIL.  FOR EXAMPLE,
  (DO I 0 (ADD1 I) (EQ I 400)
	(COND ((NULL (A I)) (GO B)))
	(PRINT (A I))
    B    (SETQ TOTAL (PLUS TOTAL (A I))))
************* THERE ARE TWO OTHER DO FORMATS NOW ALSO ******

	3) A PSEUDO-RANDOM NUMBER GENERATOR
CALLED "RANDOM" EXISTS AS A FUNCTION OF NO
ARGUMENTS. ITS RANDOMICITY WILL VARY AS TIME
GOES BY, AND AS VARIOUS RANDOM ALGORITHMS
ARE TRIED OUT. CURRENTLY IT IS SOME RANDOM
SHIFT REGISTER SEQUENCE.

	4)"CRUNIT" MAY BE USED TO OBTAIN
A LIST WHOSE FIRST MEMBER IS THE NAME OF 
THE MOST RECENTLY SELECTED USER-I/O-DEVICE,
AND WHOSE SECOND MEMBER IS THE CURRENT USER
SYSTEM NAME.  IF THERE ARE ARGUMENTS,
THE CURRENT DEVICE IS UPDATED IN EXACTLY
THE SAME MANNER AS WITH "UREAD", BUT THE
FILE IS NOT OPENED.  ONE SHOULD REVIEW 
PREVIOUS DOCUMENTATION ABOUT OMITTING 
ARGUMENTS OF UREAD,UWRITE AND UFILE.

	5) "GO" AND "RETURN" HAVE BEEN FIXED
TO OPERATE IN ACCORD WITH ONE'S INTUITION
ABOUT SUCH FUNCTIONS: THEY HAPPEN WHEN
EVALUATED BY THE INTERPRETER, AS OPPOSED TO
THE PREVIOUS RANDOM IMPLEMENTATION.  HENCE
THERE SHOULD BE NO DIFFERENCE BETWEEN
INTERPRETED CODE AND COMPILED CODE ON THIS
MATTER.

	6) "LAMBDA" HAS BEEN GENERALIZED
SUCH THAT "(LAMBDA (L) E1 E2 . . . EN)"
EVALUATES LIKE "(LAMBDA (L) (PROG NIL 
E1 E2 . . . (RETURN EN))"

	7) "ERRSET", WHEN GIVEN A SECOND
ARGUMENT, NOW WORKS AS SPECIFIED IN THE
LISP 1.5 PROGRAMMERS MANUAL, I.E. ERROR
COMMENTS ARE GIVEN ONLY IF THE SECOND ARG
EVALUATES TO NON-NIL.  WITHOUT THE SECOND
ARG, ERROR COMMENTS ARE ALWAYS PRINTED.