$NEWS; ANS [1] IF -UNASSIGNED($NEWNEWS) THEN NEWNEWS [2] ERASE($NEWS,$NEWNEWS) [3] IF -UNASSIGNED(OLDPPL) THEN GOTO OP [4] IF -UNASSIGNED(SPECIAL.FNS) THEN RETURN [5] "" [6] "PPL Version 53A - News" [7] "" [8] " Version 53 of PPL contains several significant" [9] "improvements over the earlier Harvard version (V51). Most" [10] "of the changes are compatible with existing programs, except" [11] "for the introduction of standard mathematical precedence and" [12] "a change to the division function. The remaining changes" [13] "involve the introduction of new system functions or language" [14] "forms and are described in the new version of the PPL User's" [15] "Manual. They will also be outlined in a forthcoming summary" [16] "of the changes since version 51. If you have any questions" [17] "or problems, please contact:" [18] "" [19] " Eric Roberts @ HARV-10" [20] " Aiken Computation Lab 212" [21] " (617) 495-4147" [22] "or" [23] " Ed Taft @ PARC-MAXC (XEROX)" [24] "" [25] "" [26] " Version 51 is available on Dectape 1749 (labelled" [27] "PPL-10 V-52 C) in the PPL drawer. The old First Data" [28] "version is available on Dectape 1639 (FD PPL V51C) also in" [29] "the PPL drawer." [30] "" [31] "Would you like a compatible version (with standard" [32] DEMAND.PROMPT _ "Iversonian precedence and old division)? " [33] ANS _ ?"; IF LENGTH(ANS) > 0 THEN IF (ANS[1]='y)! ANS[1]='Y THEN GOTO OPM [34] "" [35] DEMAND.PROMPT _ "Include functions IVERSONIAN and RENUMBER? " [36] ANS _ ?"; IF LENGTH(ANS) > 0 THEN IF (ANS[1]='y)! ANS[1]='Y THEN GOTO SPM [37] GOTO EXIT [38] OPM: "" [39] "To restore the compatible version without using this" [40] "dialogue, type:" [41] " OLDPPL <- TRUE; READ(""LIB:NEWS"")" [42] OP: IVERSONIAN; BINARY("/",IDIV) [43] EXIT: ERASE($IVERSONIAN,$RENUMBER) [44] "" [45] RETURN [46] SPM: "" [47] "To start up V53 with IVERSONIAN and RENUMBER, without using" [48] "the news dialogue, type:" [49] " SPECIAL.FN <- TRUE; READ(""LIB:NEWS"")" $ $NEWNEWS [1] "" [2] "Update 230 contains a few additional fixes, described below:" [3] "" [4] " (1) RESUME now works when suspended in WHILE form." [5] "" [6] " (2) To eliminate ambiguities arising in the last version," [7] " the function ERASE and the system object predicates" [8] " no longer perform automatic STRING to symbol conversion." [9] " The EXECUTE function may be used to perform explicit" [10] " conversion." [11] "" [12] " (3) INSTANCE no longer causes illegal argument type messages" [13] " because of its left hand operand. If the left operand" [14] " is not a user object, INSTANCE always returns FALSE." [15] "" [16] " (4) A simple BACKTRACE routine is now built-in which lists" [17] " each of the functions entered and the current line number," [18] " proceeding outward from the current position." [19] "" $ $IVERSONIAN; I, K, OPS, OP [1] OPS __ OPERATORS [2] FOR I_1:LENGTH(OPS) DOTHRU ENDOP [3] OP __ OPS[I] [4] UNARY(OP, UNARY.DEF(OP), 20) [5] ENDOP: BINARY(OP, BINARY.DEF(OP), 20, "RIGHT") [6] UNARY("-->",UGOTO,10) [7] BINARY("-->",CGOTO,10,"RIGHT") [8] DEF.UNARY.PREC _ DEF.BINARY.PREC _ 20 [9] DEF.ASSOC _ "RIGHT" $ $RENUMBER(N,[DS);OPS,UPREC,BPREC,SEQNO,LOW,NEXT,I,OP,DU,DB [1] IF LENGTH(DS) > 1 THEN RETURN "IN FN RENUMBER: WRONG NUMBER OF ARGUMENTS" [2] DS _ (IF LENGTH(DS) = 0 THEN N ELSE DS[1]) [3] IF NOT(N==INT) & NOT(DS==INT) THEN RETURN "IN FN RENUMBER: ARGUMENT NOT INTEGER" [4] IF N<0 ! N>1000 THEN RETURN "IN FUNCTION RENUMBER: ARGUMENT OUT OF RANGE" [5] OPS__OPERATORS; UPREC_BPREC__MAKE(TUPLE,LENGTH(OPS),0) [6] DU_DEF.UNARY.PREC; DB_DEF.BINARY.PREC [7] FOR I_1:LENGTH(OPS) DO UPREC[I]_UNARY.PREC(OPS[I]); BPREC[I]_BINARY.PREC(OPS[I]) [8] SEQNO_DS; LOW_0 [9] NEXT_99999 [10] FOR I_1:LENGTH(OPS) DO (IF UPREC[I]>LOW & UPREC[I]LOW & BPREC[I]LOW & DULOW & DB