Date: 1-Nov-82 14:56:40 From: Cris Perdue Subject: APPEND Class: Request, deficiency In PSL the function APPEND now takes exactly 2 arguments. Could it be extended to take an arbitrary number. Probably 0 and 1 should also be legitimate numbers of arguments. What say? RESPONSE (Eric): Someday... Date: 30-Oct-82 18:49:42 From: douglas Subject: difference in apply betwen compiled and interpreted code. Class: Bug Dealing with apply to nexprs.: 18 lisp> (dn nexpr (a) (princ a) (terpri)) NEXPR 19 lisp> (de calling-function (arg) (apply (function nexpr) (list arg)) 19 lisp> ) CALLING-FUNCTION 20 lisp> (calling-function 'a) A NIL 21 lisp> (calling-function '(a b)) (A B) NIL 22 lisp> (compile '(calling-function)) *** Function `CALLING-FUNCTION' has been redefined *** (CALLING-FUNCTION): base 257007, length 3 words NIL 23 lisp> (calling-function '(a b)) ((A B)) NIL 24 lisp> (calling-function 'a) (A) NIL 25 lisp> ^C -------- Note: This bug does not exist on the vax. On the vax, this function runs the same interpretively and compiled. (The interpretive version on the 20 is the same definition as that on the vax). This use to work on the 20 until about 3 weeks ago. douglas RESPONSE (Eric): Fixed. Date: 27-Oct-82 17:16:07 From: douglas Subject: bug in psl - (tr get) Class: Bug Do (tr get) in psl, and you get an endless message: ***** Undefined function 'GET' called from compiled code over and over and over and over ... douglas RESPONSE (Eric): It should not let you (tr get). This could be fixed by changing DEBUG not to use REMD, and using some other method of avoiding the "foo redefined" message. Date: 22-Oct-82 09:38:48 From: douglas Subject: function timings. Class: Request Is it possible to make a version of psl that gives me a profile of all the lisp functions called and how much cpu time was spent in each. (I would assume since this involves some overhead, it should not be put in the standard psl). It would be preferable to have this on the vax. RESPONSE (Lanam): Doug has written a package to do this. Date: 18-Oct-82 12:29:47 From: Alan Snyder Subject: compiler bug Class: Compiler bug The compiler incorectly compiles the first clause of the COND in the function below. It compiles to return M2, rather than M1. (de foo (i1 i2) (let ((m1 (> i1 3)) (m2 (> i2 4)) ) (cond ((not (eq m1 m2)) m1) (t (+ i1 i2)) ))) RESPONSE (Eric): Fixed. Date: 15 Oct 1982 1131-PDT From: PERDUE at HP-HULK Subject: Make-String Class: Documentation bug The reference manual claims that the first argument to make-string is the upper limit for indices into the string, but in fact it is the number of characters in the string. RESPONSE (): Still extant. Date: 9-Oct-82 12:14:25 From: douglas Subject: Terminal interrupt (^B) error Class: Bug Similar to the one on the vax, on the 20 it also tries to reexecute previously typed in expressions. 8 lisp> (show 'thing) (thing (ako ($if-added (add-instance)) ($if-removed (remove-instance))) (instance ($value (request) (domain) (rule)) ($if-added (add-ako)) ($if-removed (remove-ako))) (self ($value (%(fname :frame))))) nil Time: 120 ms 9 lisp> *** Break in cleario at 43316 Break loop ***** `show' is an unbound ID ***** Continuation requires a value for `show' Break loop thing Time: 1 ms 12 lisp break>>> ^C douglas RESPONSE (): Extant bug. Date: 7-Oct-82 15:17:52 From: Alan Snyder Subject: Interaction with EXEC location printout Class: Bug PSL is apparently using a reserved location in an improper way. The location ".JBSYM" (whatever that is) is supposed to point to a symbol table, but it apparently does not contain a proper value, since if you ask EXEC to print out locations in symbolic mode, the EXEC will blow up trying to do a symbol table lookup. Please fix this bug. (I have noticed NDDT get screwed up doing symbol table lookup also; perhaps this is the cause of that problem as well.) (This analysis is based on information provided by Tim Eldredge.) RESPONSE (Eric): BARE-PSL is now created with no symbol table at all. This prevents the EXEC from being blown up, but prevents debugging at times. The LINKER was trying to make a symbol table that wouldn't fit in memory with PSL. Date: 6-Oct-82 10:00:11 From: FILMAN at HP-HULK Subject: Re: apply and list Class: Complaint, documentation deficiency If only EXPRs can be correctly applied, then you need to fix the documentation, where it says: "We permit macros and fexprs to be applied;" though the rest of the sentence presents a confusing disclaimer. In any case, why can FEXPRs and MACROS be correctly applied? Bob RESPONSE (Eric): They can be applied, but the result of Apply(FexprOrMacro, X) is the same as Apply(cdr getd FexprOrMacro, X). That means that the code is treated as though it were an EXPR. FEXPRs take a single argument, which is a list of unevaluated parameters. In the case of EXPRs, Apply(X, Y) is the same as Eval(cons(X, for each U in Y collect list('QUOTE, U))). This is not the case for FEXPRs or macros. In the case of macros, Apply can be used to perform macro expansion, i.e. (apply 'let '((let ((x y)) z))) returns ((lambda (x) z) y). In the case of FEXPRs, the list given to APPLY should have one element, which is the formal parameter to the function, e.g. if x=1, y=2 and z=3, then (apply 'list '((x y z))) returns (1 2 3). This type of thing is only dome in unusual situations, e.g. in Eval. It is generally not recommended that macros and fexprs be given to APPLY. The function which does what you want is EVAL. Date: 5-Oct-82 17:47:25 From: FILMAN at HP-HULK Subject: Apply and list Class: Inquiry, deficiency Apply doesn't seem to work with list. I.e.: (apply 'list '(3 4 5)) ==> nil Is this a feature or a bug? Bob RESPONSE (Eric): Only EXPRs can be APPLYed correctly. LIST is a FEXPR. Date: 5 Oct 1982 1628-PDT From: Alan Snyder Subject: Fast vector access Class: Compiler bug The PSL compiler still has a bug related to fast vector access: (de foo (v) (cons (+ (igetv v 0) (igetv v 1)) (+ (igetv v 2) (igetv v 3)) )) FOO (setf v [1 2 3 4]) [1 2 3 4] (foo v) (3 . 7) (compile '(foo)) *** (FOO): base 460253, length 6 words NIL (foo v) (0 . 7) (*ENTRY FOO EXPR 1) (*ALLOC 0) (*MOVE (MEMORY (REG 1) (WCONST 4)) (REG 2)) (*WPLUS2 (REG 2) (MEMORY (REG 1) (WCONST 3))) (*MOVE (MEMORY (REG 1) (WCONST 1)) (REG 1)) (*WPLUS2 (REG 1) (MEMORY (REG 1) (WCONST 2))) (*LINKE 0 CONS EXPR 2) RESPONSE (Eric): Fixed. Date: 5-Oct-82 15:11:06 From: Cris Perdue Subject: Documentation for REPEAT Class: Documentation bug Documentation for REPEAT is still incorrect in the latest PSL reference manual. The syntax is: Repeat ([S:form], E:form): nil RESPONSE (): Still extant. Date: 2-Oct-82 14:15:18 From: douglas Subject: Printing of error messages in compiler. Class: Suggestion Could the error messages that are longer than one line, be indented about 1 tab stop (5-8 spaces on the 2nd and succeeding lines so that they stand out and are easier to distinguish and read). An example would be *** Car in (car (foo 'foo1 (foo2 (foo3 'ffo4 (foo4 'xjks) 'sdjkl) (append (foo2 'x) (apply 'foo3 '4))))), not used, therefore not compiled. Due to macros, a number of these come up in my program. thanks, douglas RESPONSE (Cris): Low priority. Date: 2-Oct-82 12:48:03 From: douglas Subject: PRINC does too much. Class: Complaint Princ should not check the position of the line to determine whether or not the atom will fit. There should be a higher level function with that property. I thought princ should just print the atom. (or is there a lower level princ with out that check and possibly added carriage return not printed). douglas RESPONSE (Eric): Improvement is needed. Date: 2-Oct-82 12:46:12 From: douglas Subject: Please do not have psl come up in the editor. Class: Complaint This is not a desired start up position. 1) Reading logs of background jobs is very difficult, if you can get them to work at all. 2) Nmode does not work on a lot of terminals. (including the ever popular chipmunk. 3) The first thing I want to do in a lisp is dskin or fasl in my files, not edit a command to do this. 4) It is even difficult to run do's with this type of mode. (shell scripts). douglas RESPONSE (AS): PSL no longer comes up in the editor. Date: 1-Oct-82 11:23:53 From: Alan Snyder Subject: Printing of the escape character (!) Class: Complaint, deficiency The atom - prints as !- in Lisp mode. The atom + prints as !+ in Lisp mode. I believe this is a mistake. The printer should not insert unnecessary !'s. RESPONSE (Cris): Extant deficiency. I assume it will be fixed when someone shows he/she is being really hurt. It's a real crock in my personal opinion. Date: 30-Sep-82 11:09:01 From: Alan Snyder Subject: " already loaded" messages Class: Request, complaint I would like to reiterate a request made previously, I believe, by Doug to get rid of the "FOO already loaded" messages. If you feel strongly that some sort of warning is needed when people type (LOAD FOO) by hand, then I would suggest having LOAD return a string that would be printed by the Read-Eval-Print loop. I don't think there is any need to print these messages when the LOAD is contained in a file (either source or object) that is being read. RESPONSE (Eric): Fixed. Date: 29-Sep-82 11:34:48 From: douglas Subject: upon exit of psl (or interrupt with ^c). Class: Request Can the terminal keys be restored upon exit of psl-nmode (or interrupt with ^c)? dougla Add to things psl should do when ^c is typed: restore cntl-s. (This should be possible since emacs does this). douglas RESPONSE (Cris): Use C-X C-Z to exit NMODE; this problem does not occur when using ^C to exit PSL in its ordinary top loop. Date: 29-Sep-82 10:01:01 From: douglas Subject: Bug in nmode Class: Bug, deficiency If you type (expression) cntrl-] E. where the cntrl-] E is on the start of a new line, you get Exiting NMODE Lisp End of File read!, shouldn't it execute the last expression? Why should typing a carriage return before the cntrl-] E make a difference? douglas RESPONSE (Alan): If RETURN is typed before Lisp-E, NMODE is not supposed to read the previous expression. "End of File read!" is a reasonable response. "Exiting NMODE Lisp" is a confusing message, but not generated by NMODE. Date: 28-Sep-82 20:59:41 From: douglas Subject: Close all parenthsis to a particular level. Class: Request How about adding the ability of ] to close all parenthesis (as in franz, maclisp, ucilisp). It would be nice if it could stop at [ (as in franz, maclisp, ucilisp). But I realize you use [] for reading arrayes, thus maybe you could use {} for this type of bracketing. It would be nice to type } to close an expression instead of )))))) (and have to count them also, or wait for the editor to match them flipping the screen at 1200 baud (That process is a pain to go through in the editor). douglas RESPONSE (Cris): This is a relatively low priority now, I'd say. Date: 28-Sep-82 13:50:35 From: Cris Perdue Subject: CompileTime and DskIn Class: Note (CompileTime (dskin "blah.sl")) has the effect of treating the contents of blah.sl as though they were textually embedded in the file with the CompileTime form: those forms are compiled. (CompileTime (load blah)) on the other hand causes the definitions in blah.b to be made available at compile time. Even if there is a text file blah.lap rather than binary blah.b, "load" seems to only load the definitions. If a file with (CompileTime (load foo)) in it is compiled, and if foo.lap (another source file) exists rather than foo.b, then the contents of foo.lap are effectively included in the source file I am trying to compile. This is a difference in behavior between compiled and non-compiled files. RESPONSE (Eric): Extant bug. This is the actual behavior. LOAD should always make the definitions available rather than compiling them. It is intended that DSKIN result in compiling the contents of the file referred to. Date: 28-Sep-82 11:19:30 From: Alan Snyder Subject: RETURN complaint Class: Compiler bug, complaint The PSL compiler now produces an error message if it encounters a RETURN with no arguments. This is fine. However, it still generates an invocation of "NIL". It should be possible to avoid generating garbage code when there are errors in the source. RESPONSE (Eric): A warning is now issued, but code to return NIL is generated and compilation continues. Date: 28-Sep-82 11:01:15 From: Cris Perdue Subject: Documentation update for CopyStringToFrom Class: Note Copy all characters from OLD into NEW. This operation is destructive. If the lengths of OLD and NEW differ, only the lesser number of characters is copied. If NEW is longer than OLD, the part not copied into is left unchanged. RESPONSE (): To be put into the manual. Date: 27-Sep-82 13:01:31 From: Alan Snyder Subject: Undefined functions Class: Complaint The error "Undefined function FOO called from compiled code" should (i.e., ought to be, for the user's sake) continuable. RESPONSE (Eric): Yes, that would be one benefit of loading a register with the number of arguments being passed to a function. The problem now is that continuation is performed by interpreting a LISP form, and it is not known how many arguments should be put in the list to be evaluated. Date: 27-Sep-82 11:27:15 From: Cris Perdue Subject: EOF handling Class: Inquiry There appears to be no documentation in the reference manual concerning end of file handling, except for the case of READ. It appears to be undocumented for ChannelReadChar in particular. RESPONSE (Cris): See below, message from AS. Date: 27-Sep-82 04:33:32 From: douglas Subject: Speed of psl Class: Inquiry I am finding psl on the vax to be much slower than psl on the 20. Is this true? Is there any reason for this? (Things are noticiable a factor of 4 slower with equivalent load averages - but I did not do any timings). douglas RESPONSE (): ?? Date: 27-Sep-82 09:02:49 From: Alan Snyder Subject: ChannelRead exception handling Class: Bug, documentation error The manual says that ChannelRead will catch $READ$ and return $EOF$. This is false; only Read does the catch. RESPONSE (Eric): None of the input functions use THROW any more. Thus no catches are performed, either. READ and company return the value of the variable $EOF$. Character at a time functions return (char EOF). Date: 24-Sep-82 14:20:40 From: FILMAN at HP-HULK Subject: Page and section numbers Class: Suggestion, complaint I find confusing the fact that (in the PSL manual) page and section numbers are annotated the same way. When the index refers to 8.5, I don't know whether to rush off to section 8.5 (wrong) or page 8.5 . How about 8.5 for sections and 8-5 for pages, or something like that? Bob RESPONSE (): No response yet. Date: 27 Sep 1982 03:57:05-PDT From: douglas at HP-Hewey Subject: VAX version and prettyprint Class: VAX deficiency The module prettyprint does not exist on the vax (only the older module pretty). douglas RESPONSE (Eric): Fixed. Date: 23-Sep-82 15:26:13 From: douglas Subject: Backtrace. Class: Complain I found if you have (x (y (z a))) and you get an error evaluating (z a), you might find x and y on the backtrace stack even though you haven't executed it yet. Worse, if you trace y, y will never say it is entered but will be on the backtrace stack. douglas RESPONSE (Cris): Just what should appear on the backtrace stack and when is has been a matter of some debate. The phenomenon you are seeing occurs just in interpreted code. Date: 22-Sep-82 15:34:38 From: douglas Subject: DO loops Class: Bug do still returns t when there are no clauses after the test. the manual says it returns nil. RESPONSE (Eric): USEFUL has been rebuilt and presumably DO is correct. Date: 20-Sep-82 15:50:44 From: douglas Subject: Scanner Class: Bug 1.2xa is read as two tokens 1.2 and xa. 1.2ea gives a error message that the exponent is missing. same with 1.2x-a and 1.2e-a 1xa is two atoms 1 and xa. 1ea says that the exponent in the float is missing. douglas RESPONSE (Cris): Still extant. I consider this a relatively low priority. Common LISP has a well-defined and general scanner that we should implement eventually. Date: 20-Sep-82 11:07:38 From: Alan Snyder Subject: Excess right parens during compilation Class: Complaint When compiling a file, extra right parens should produce a warning message, as (in my case) they often are the result of a paren mismatch in the middle of a function definition. RESPONSE (Eric): The compiler now gives a warning message about this. Date: 20-Sep-82 10:43:11 From: Alan Snyder Subject: Functions to "replace" MAIN Class: Complaint I have found when writing functions designed to "replace" MAIN, that it is necessary for those functions to initialize the variables CurrentReadMacroIndicator* and CurrentScanTable*, otherwise after a SaveSystem when the program comes up, the scan table will be in a very strange state. I believe that this initialization should be performed by a "pre-main" procedure and that user-written "main" procedures should be spared these details, which tend to be system-dependent. Your source code for Main claims "Redefine this function to call whatever top loop is desired." I agree, except that "this function" should be one that does nothing except invoke the "standard" top loop. RESPONSE (Eric): Fixed. Date: 20-Sep-82 09:06:06 From: PAULSON Subject: Read macros, the "BUG" function Class: Bug, deficiency Two problems: (1) Read macros are apparently not attached to read tables. Therefore a read macro for one read table may interfere with other read tables, including the system read table. (2) the function BUG bombs on directory access privileges. RESPONSE (Cris): Still extant. At some point the Common LISP input mechanisms should be implemented for PSL, solving the read macro problem. RESPONSE (Cris): The BUG function is still incorrect, but in a different way. Date: 18-Sep-82 15:54:10 From: douglas Subject: What does # mean? Class: Inquiry Why is this the return value of faslin? RESPONSE (Eric): No comment on this question. Faslin now returns NIL. Date: 17-Sep-82 11:40:31 From: Alan Snyder Subject: Use of fluid variables Class: Suggestion As part of the current effort to "clean up" PSL, I would like to suggest that an effort be made to reduce or eliminate the use of fluid variables as "optional" or "implied" arguments, by defining new functions with explicit arguments. For example, instead of having SpecialReadFunction*, SpecialWriteFunction*, and SpecialCloseFunction*, there should be an additional function OpenSpecial that takes four arguments, the filename, and the three functions. Another example is DumpFileName*: currently there is no way to save a PSL that does not have DumpFileName* bound to the name of the file it was dumped to. In the case of "system" programs, the default dump file should probably be "PSL.EXE" (i.e., something that would write in the user's directory). There should be a variant of DumpLisp that takes the filename as an argument (and does NOT bind DumpFileName*). These are the two examples that come to mind, there may be others. RESPONSE (Eric): DumpLisp and SaveSystem now take arguments rather than using fluid variables. The problem with fluid variables and "open" is still extant. Date: 17-Sep-82 11:14:26 From: Alan Snyder Subject: message "($FLUID FOO) not compiled" Class: Compiler complaint, inquiry What does the message "($FLUID FOO) not compiled" mean? It sounds like the compiler has broken or something, although the program seems to work. Furthermore, why shouldn't it be compiled? Did the compiler run out of registers or something? Suggested fix: either fix the compiler to compile it, or change the error message to be more informative to naive users. RESPONSE (Eric): The message has been changed to "not used, therefore not compiled." Date: 17-Sep-82 09:54:27 From: Alan Snyder Subject: Endings of strings Class: Complaint If I forget the ending " on a string in a file, then I get one message "string continued over EOL" for every succeeding line in the file when the file is read in. There should be only one message given. Furthermore, if you believe that multi-line strings are bad (which I do), then you should probably generate an Error so that you don't read the remainder of the file in "reverse polarity" (in terms of what is inside vs. outside of string literals). (Manual note: I couldn't find anything in my manual that addresses the issue of multi-line string literals.) RESPONSE (Eric): There is (and has been) a flag to turn off the message. I don't plan to change this; some major users in fact depend heavily on multi-line string literals. Date: 17-Sep-82 02:46:17 From: douglas Subject: Proposal for inum/wnum arithmetic. Class: Suggestion I have thought of a reason for having both i and w commands. I think the w should be what both are now (just do the machine operation and dont worry about tags). But the i commands (iplus, ishift, ilor, etc.) could take their arguments make sure they are working on a full word (either go down the pointer to the integer object or move the immediate number into a full word (or register), play with it there, then if the number if to be passed to another procedure or used outside the context of the i num arithmetic functions, to be send to a function that would convert the word back to psl format. If small, convert to immediate format, if big, return the pointer to the object. This way I could have access to a full word on any machine, and be able to produce efficient open code, and not have to worry about the psl tag bits. The proposal would be if the system sees (ilor (ishift x n) (iland a b)), that x, n, a, and b would be converted first, then the operations done, and then the one result would be converted back. No type checking would be done (if it is an immediate number, the pointer would be followed and its location used, for efficiency.). How does this idea sound? RESPONSE (Eric): Not altogether right. Some of this would be more applicable to Franz LISP than it is to PSL. Date: 16 Sep 1982 1141-PDT From: Kendzierski at HP-HULK (Nancy) Subject: UNION clause of FOR Class: Documentation bug The manual states that "(UNION EXP) is similar to (COLLECT EXP), but only adds an element to the list if it is not equal to anything already there." However, I get the following results with COLLECT and UNION: ----------------------------- (for (from i 1 4) (collect (cond ((= i 1) 1) ((= i 2) 1) ((= i 3) 3) ((= i 4) 3)) )) Returned: (1 1 3 3) ----------------------------- (for (from i 1 4) (union (cond ((= i 1) 1) ((= i 2) 1) ((= i 3) 3) ((= i 4) 3)) )) Returned: 3 ----------------------------- RESPONSE (Cris): Actually, UNION is similar to JOIN rather than COLLECT. Thanks. (The manual is incorrect.) Date: 13 Sep 1982 1249-PDT From: Alan Snyder Subject: Make-String Class: Bug in COMMON.SL Make-String in compiled form creates a string with 1 too many elements. RESPONSE (Eric): Fixed. Date: 10 Sep 1982 1606-PDT From: Alan Snyder Subject: (APPLY x (LIST a b c...)) Class: Bug, complaint The manual states that (APPLY x (LIST a b c...)) is compiled in such a way that the list (LIST a b c ...) is not actually constructed. This is a very useful optimization that I rely upon to make message passing efficient in my OBJECTS package. However, I was recently surprised to discover that the optimization is not performed if there are six or more elements in the list. I surmise that this is somehow related to the number of real (as opposed to virtual) registers in the DEC-20 implementation, but don't see any reason why this should prevent the optimization from being carried out. What gives? RESPONSE (Eric) It's a nasty interaction between optimized compilation of LIST and optimized compilation of APPLY. I can fix it. RESPONSE (Eric): Fixed. Date: 10-Sep-82 10:49:18 From: douglas Subject: configuration of bps and heap on 20 Class: Request Can the configuration of the above in psl be changed by moving approx. 20K-30K of heap space from heap to bps in bare-psl and psl? thanks, douglas Date: 10-Sep-82 10:22:02 From: douglas Subject: Breakfunction property Class: Documentation deficiency, documentation bug I found if you set the value of breakfunction on the propertylist of an atom, and type the atom at the break level, it will execute that function. This needs to be documented somewhere. Also the help file printed at the level should be able to be updated to reflect any changes the user may make. I am not sure I like having atoms automatically changed into functions at type in, but I do like being able to change the break system to take control characters instead of alphabetic characters. douglas Date: 10-Sep-82 09:07:36 From: douglas Subject: warnings by compiler. Class: Request When the compiler says something is declared fluid, could you include the function that caused this on the same line in the message. Due to the fast number of lisp systems, I have a hard time remembering whether yours does it before it prints the function name concerning it or after. douglas RESPONSE (Eric): Fixed. Date: 9-Sep-82 15:08:09 From: douglas Subject: psl space allocations on the vax Class: Request Could the psl on the vax be reconfigured so that there is 100K words of bps free at its startup (currently it is approx 46K words)? thanks, douglas Date: 9-Sep-82 14:32:52 From: douglas Subject: " . . . not compiled" message Class: Inquiry, complaint, request Does the following mean the whole phrase was not compiled or just the car was not compiled? *** (car (merge-comment (*i-put-datum (frame ($local type)) (get-field-location 'nil ($local key1)) '3 '(insert-frame (fname :frame))) 'finherit: 'continue)) not compiled. If the first, it is very, very wrong since all of these functions are my own and do side effects (set property lists). If the second, the message should be changed to something like, return value of car is not used and thus car is not being compiled. douglas RESPONSE (Eric) It means just the CAR was not compiled. I'll see what I can do about the message. RESPONSE (Eric) Fixed the message. Date: 9-Sep-82 14:29:09 From: douglas Subject: Fluid and macro of the same name Class: Bug, deficiency One cannot use the same name for a fluid and a macro. Please fix this soon. It is a very annoying restriction that shouldn't exist. douglas RESPONSE (Eric) Fixed. Date: 3-Sep-82 13:06:38 From: FILMAN at HP-HULK Subject: emode and [] Class: EMODE deficiency, EMODE complaint The s-expression functions in emode don't seem to know about []'s. Since these are the default construction of defstruct, this is a serious deficiency. Bob Date: 3-Sep-82 11:57:28 From: Cris Perdue Subject: STEP bug Class: Bug Try (step '(plus 3 4)). Step using ^N. The stepper breaks after a couple of steps. RESPONSE(Benson): Fixed. Date: 3-Sep-82 04:52:14 From: douglas Subject: can you change princ, Class: Request Can you change the printing of the following by princ, so that the open parens are on the beginning of the line, not the end? I think that this would be more pleasant to look at. Currently: (THING (WCHEM-CLASS (WCH) (WCHO (C-O-STRETCH-ALCOHOL) (O-H-DEFORMATION ( (THING (WCHEM-CLASS (WCH) (WCHO (C-O-STRETCH-ALCOHOL) (O-H-DEFORMATION ( O-H-STRETCH-FREE-OH-ALCOHOL) (O-H-STRETCH-INTRAMOLECULAR-H-BONDED-ALCOHOL) ( C=O-STRETCH-OVERTONE) (C=O-STRETCH)))) (Actually I tried to copy this off my terminal and one line got mixed up, but it still displays what is currently done. douglas RESPONSE(Benson): That's what PRETTYPRINT is for. It has been suggested that the top loop use PRETTYPRINT instead of PRINT. Any opinions? Date: 2-Sep-82 15:17:00 From: Alan Snyder Subject: Garbage collection trap request Class: Feature request I would like to have the GC starting and ending messages printed by specific functions that are invoked at the beginning and ending of each garbage collection. These functions should take as arguments all information that they use to construct an appropriate message. This change would allow me to alter the form of announcement without mucking with the GC itself. In particular, I don't want to have to make an altered copy of the GC code or access its private variables. I realize that the GC-start function would have to be written to not allocate any storage. I need this feature to display a GC announcement in NMODE. Date: 2-Sep-82 12:13:04 From: douglas Subject: flag *continuableerror Class: Documentation request I found a flag *continuableerror which should be documented in the manual. (It is very useful). Date: 2-Sep-82 11:45:35 From: FILMAN at HP-HULK Subject: printing circular structures to depth Class: Feature request, notice, miscellaneous Unfortunately, PSL doesn't have a printlevel function (that prints a structure only to a certain depth). Nor does the circular printing function deal with circularity in vectors. I've written a (not deeply thought-out) depth-limited printing function of my own. Since PSL doesn't come with the most complete set of user utilities, how about a user-utility function area for such contributions? Bob Date: 2-Sep-82 11:05:43 From: Alan Snyder Subject: Char-UpCase and Char-DownCase Class: Bug Char-UpCase and Char-DownCase return NIL instead of their argument when no conversion is done. RESPONSE (Eric): Fixed. Date: 2-Sep-82 10:53:48 From: FILMAN at HP-HULK Subject: atomic rules Class: Complaint In PSL, (atom x) == (not (pairp x)). Thus, vectors, code pointers strings, etc are all atoms. I know that this is documented. However, it is counter-intuitive (counter-intuitive == the other lisps I've played with don't do it this way). Not having read the fine print, I spent an afternoon discovering this fact. Bob RESPONSE (Eric) I agree it is confusing, but it conforms to all the other Lisps I know of! Perhaps you are confusing atoms with symbols (called litatoms in Interlisp?) Date: 2-Sep-82 10:43:26 From: douglas Subject: continuable break. Class: Inquiry, feature request Is there a function that would be (contbreak) ? Which is something to (break) as (conterror) is to (error)? douglas RESPONSE (Eric) That's really what ContinuableError is. It just puts you in a break loop where you can fix things. Date: 2-Sep-82 01:58:26 From: douglas Subject: break package and returning new values. Class: Inquiry I have read through the break package, and tried a few things, and can not find how I can do something that means (return value) where value is a lisp-expression to be evaluated and become the value of the call to break(or conterror), without calling the editor. I would like to be able to return a value or evaluate an expression that may not be similar to the expression that caused the error and return that value back from the break point (similar to what one can do in maclisp/franz/lisp machine lisp). How do I do this? douglas RESPONSE(Snyder): Just type the expression at the break handler, then type 'C' for "continue using last value". Date: 1-Sep-82 23:02:45 From: douglas Subject: Did someone change faslout? It use to echo input, but now it doesn't seem to. Can you change faslout back to echoing input that is just passed to the fasl file. I can not figure out easily when I finish typing an expression to faslout any more. Date: 1-Sep-82 22:58:44 From: douglas Subject: defn* and *defn Class: Documentation request what is defn* and *defn? and what is dfprint*? They are on page 19.3. They seem important yet are pretty much undocumented. What are they. RESPONSE (Eric) *DEFN and DFPRINT* are used by the top loop to allow processing other than evaluation. if *DEFN is non-NIL, DFPRINT* is applied to each form instead of being evaluated. This is the means by which FASLOUT and other functions work. Date: 1-Sep-82 22:55:56 From: douglas Subject: macros expanding to "bothtimes" Class: Complaint, bug, deficiency HP-PSL 3.0, 27-Aug-82 1 lisp> (bothtimes (setq x 2)) 2 2 lisp> x 2 3 lisp> (dm x (y) `(bothtimes (setq . ,(cdr y))) 3 lisp> ) X 4 lisp> (x z 4) 4 5 lisp> z 4 6 lisp> (faslout "junk") FASLOUT: (DSKIN files) or type in expressions When all done execute (FASLEND) T 7 lisp> (bothtimes (setq a 3)) 3 8 lisp> (x b 4) 9 lisp> (faslend) *** Init code length is 2 *** A declared fluid *** B declared fluid **FASL**INITCODE**NIL 10 lisp> a 3 11 lisp> b NIL 12 lisp> (quit) I do not think this is correct, the call to x on line 8 should be expanded by the compiler and then the system should notice that it is a bothtimes clause and should be executed at compile time and compiled. Instead it appears to be just compiled. The x is expanded (it is just not executed at compile time like it is suppose to be). Can you fix this soon? thanks, douglas Date: 1-Sep-82 17:00:41 From: FILMAN at HP-HULK Subject: trace Class: Inquiry The function "trace" is defined but doesn't trace; nor is it documented in my version of the documentation. Bob Date: 1-Sep-82 12:08:02 From: FILMAN at HP-HULK Subject: circular structure bugs Class: Bug, deficiency 1) Printx doesn't handle circular vector structures. Since defstruct makes vectors, this is a serious problem 2) Consider the following sequence: (setq bbb '[a b c d]) (indx bbb 3) --> d (setindx bbb 3 bbb) --> prints the appropriate circular structure (indx bbb 3) --> an infinite structure (indx (indx bbb 3) 3) --> produces a push down overflow error (indx (indx (indx bbb 3) 3) 1) --> also produces a push down overflow error What gives? Bob Date: 1-Sep-82 12:01:03 From: douglas Subject: br does not work with macros. Class: Bug If you have a function x which is a macro. Say (dm x (y) (rplaca y 'princ)) then do (br x) . Before the call to br, (x 'a) typed into the interpretor will execute the princ and return a. After the call to br, typeing (x 'a) to the interpretor will cause the expression (princ 'a) to be returned but not evaluated. douglas Date: 1-Sep-82 11:52:25 From: douglas Subject: compiletime Class: Bug do @psl (compiletime (setq a 1)) a You will get that a has been set to 1. I do not think this is right. RESPONSE (Eric) (compiletime xxx) really means (eval-when (compile eval) xxx) in the current setup. I think (eval-when (compile) xxx) does what you want. Date: 31-Aug-82 11:14:18 From: douglas Subject: declaration of functions and variables. Class: Deficiency, feature request I think it is better to have a declaration statement to declare something as a fexpr or as a nexpr, if you wish to use it before defining it in compiled code. Currently the manual says to write a dummy version. But something like : (declare (*fexpr x) (*nexpr x)) would be better. It could also be used in compiling files that reference other files but that you don't wish to load everything in to compile it. Also, (fluid x) should not set x to nil. and there should be two property list names for function type and variable type, not one, you should be able to use a name as a global variable and a fexpr. douglas Date: 31-Aug-82 10:46:17 From: douglas Subject: feature in print. Class: Request It would be nice if print could know about readmacrochars that do as follows ^lisp-expression => (tag lisp-expression). An example is quote. Note: it should make sure the tagged list is of length 2 before doing the special print(at least in the case of quote). douglas Date: 30-Aug-82 15:34:57 From: FILMAN at HP-HULK Subject: break and emode Class: Deficiency When trying to "q" from a break in emode, the cursor goes to the end of the second following line, not the next line. That is, if the screen is: (cursor shown by *) q* first line second line and you execute a meta-e, you get: q first line second line* not what you should get, which is: q first line* second line Bob Date: 30-Aug-82 13:38:40 From: FILMAN at HP-HULK Subject: emode, breaks and "a" Class: Bug Giving an "a" from emode inside a break seems to confuse the emode page printing routines some. Bob Date: 30-Aug-82 10:34:10 From: FILMAN at HP-HULK Subject: break window Class: Inquiry What happened to the break window? Bob RESPONSE(Perdue): It was removed because it behaved very poorly in various slightly "unusual" situations. Date: 28-Aug-82 03:57:53 From: douglas Subject: interrupt and dumpsave. Class: Deficiency If you do (load interrupt) (savesystem "xxx.exe") (quit) @xxx.exe The interrupts will not work in xxx.exe, but the system will think the file was already loaded. douglas RESPONSE (Eric) The function (INITIALIZEINTERRUPTS) is called when the module is loaded. It needs to be called in a fresh core image as well. It's not clear to me what the best way to ensure that is. Date: 28-Aug-82 03:56:46 From: douglas Subject: vector print length limit. Class: Feature request There should be a special variable (say *printlength) which is set to the maximum number of elements in a vector, list, (half-words vectors), which are printed out. The rest could be printed ... . This variable could be reset by the user (nil for no limit). But I think there should be a limit in the system (say 25-30?), often I get a strange error in compiled code which results in the endless printing of a vector. douglas Date: 27-Aug-82 16:09:05 From: douglas Subject: Printing "quote" expressions Class: Bug @psl 1 lisp> '(quote a b) 'A 2 lisp> douglas RESPONSE (Eric) Fixed (see BUG-FIX.LOG). Date: 27-Aug-82 14:55:33 From: douglas Subject: file function needed. Class: Feature request Is there a function which can tell me when a file was last written to the disk? I could use such a function. (I know this is machine/operating system dependent). douglas RESPONSE(Snyder): The file DIRECTORY.SL has functions that almost do what you want. Take the part of FILE-DELETED-STATUS that does at GTJFN to get a JFN, then pass that to JFN-WRITE-DATE. RESPONSE(Perdue): It appears that we will be adopting the Common LISP file manipulation functions. Date: 26 Aug 1982 17:21-PDT (Thursday) From: Liu (?) at HP-PCD Subject: Function cells, function bindings, property lists Class: Inquiry, documentation deficiency We run psl on VAX/750 under UNIX. The problems are (1) I first defined a function "x". Then I initialized the property list of "x" by using "SetProp" which turned my function definition into "NIL". (2) I went on typing my function definition again. Then I looked at my property list. It has my function definition with some other goodies in it. I'll imagine the function cell and the property cell are two seperate entities. So, these side effects are unexpected and undesired. Following is a sample of the problems. 1 lisp> (de x (y) (car y)) X 2 lisp> (pp x) (DE X (Y) (CAR Y)) T 3 lisp> (setprop 'x '((color . red))) ((COLOR . RED)) 4 lisp> (prop 'x) ((COLOR . RED)) 5 lisp> (pp x) *** X has ill-formed definition. (DE X NIL) T 6 lisp> (de x (y) (car y)) Do you really want to redefine the system function `X'?(Y or N)y *** Function `X' has been redefined X 7 lisp> (pp x) (DE X (Y) (CAR Y)) T 8 lisp> (prop 'x) ((*LAMBDALINK LAMBDA (Y) (CAR Y)) USER (COLOR . RED)) RESPONSE(Perdue): Thanks for the good observation. It turns out that the function cell in PSL always contains a machine instruction, so the lambda expression can't be stored there. PSL stores the lambda expression on the property list. I don't believe this fact is documented. RESPONSE (Eric) Calling SETPROP is inadvisable under almost any situation. Date: 26 Aug 1982 16:35-PDT (Thursday) From: Someone at HP-PCD Subject: "apply" function Class: Comment When the function "(apply 'plus '(1 2 3))" is entered, psl returns a line of the form # rather than the result "6". RESPONSE(Perdue): PLUS is a MACRO, so you don't get what you expect as an answer. In general, applying a macro causes it to perform macro expansion but not to evaluate the expanded form. Probably applying a macro ought to either be an error. In some LISPs (apply fn arglist) is equivalent to (eval (cons fn arglist)) when fn is a macro, but these are not equivalent when fn is a normal function. Date: 26-Aug-82 15:27:19 From: FILMAN at HP-HULK Subject: ***** Unexpected EOF while reading {99} Class: Inquiry I get the above message in a break, and all the ^q's I give it don't pop. Is there some sure way back to the top level? Bob RESPONSE(Perdue): Say "a" rather than "q" to get out. There is a menu that tends to come up these days, even when you don't want it. When you don't want it, use ^XO to get out of it. A couple of ^XOs and it will even disappear from the screen. We'll get rid of that menu altogether in a day or so. Date: 26-Aug-82 12:14:36 From: FILMAN at HP-HULK Subject: closures Class: Comment, documentation deficiency I was pleased to see the documentation on closures on page 10.9 of the psl manual. Unfortunately, this stuff is not implemented. Perhaps a better warning than "[??? Not yet connected to V3 ???]" could be associated with this material. Bob Date: 26-Aug-82 12:12:28 From: FILMAN at HP-HULK Subject: defstruct Class: Documentation deficiency The defstruct documentation in the psl manual does not correspond to the implementation in psl. For example, defstructp doesn't exist. Chris assures me that the defstruct in psl is lisp machine defstruct. Perhaps the manual could be adjusted for this reality. Bob Date: 26-Aug-82 11:54:50 From: FILMAN at HP-HULK Subject: emode and mm Class: Bug If you're in emode, and call mm, the exit from mm leaves emode confused. The various controll characters to the screen get printed. Doing an ^x^z and a continue psl fixes the problem. Bob Date: 26-Aug-82 11:23:54 From: douglas Subject: bugs in emode. Class: Bug, inquiry try the following: @psl 1 lisp> (emode) ^\e^L (that is type meta-e, cntl-l as the first input to emode). can ctrl-h work the same as ^b ? It does in emacs. douglas Date: 26-Aug-82 10:58:53 From: FILMAN at HP-HULK Subject: Handling of macro expansion in the interpreter Class: Comment This is a subtle one, that most lisp's get wrong. In PSL, macros eat stack. For example, the sequence (setq x 1000) (dm awhile (l)(cond ((eval (cadr l)) (eval (caddr l)) l) (t nil))) (awhile (greaterp x 0) (setq x (sub1 x))) gets a stack overflow; it needn't. I believe that stanford 1.6 lisp does this right, while uci-lisp does it wrong. Bob Date: 26 Aug 1982 0857-PDT From: douglas Subject: you can do a funcall or apply on a code pointer. Class: Comment Date: 26-Aug-82 09:47:51 From: douglas Subject: why are there global variables which can be bound statically? Class: Inquiry, complaint what is really gained by this? RESPONSE(Perdue): It is thought that it is not meaningful to rebind certain global variables. The declaration is useful to some LISP implementations. message continues: I find it unreasonable that I can not do (let ((out* (open "junk" 'output))) (princ ....)))) And if I can't do it this way, I have to use a catch to make sure that out* is bound correctly after the body of the let is executed. douglas RESPONSE(Perdue): The official PSL I/O system will probably be redone along the lines of Common LISP. Date: 26-Aug-82 09:22:25 From: douglas Subject: errors in manual. Class: Documentation bug Page 14.1: Under the function savesystem, is a spelling error. lispbannner!* should be lispbanner!*. On page 13.2 is the following : BREAKOUT!* (initially: NIL) global similar to BREAKOUT!*. Date: 25-Aug-82 13:50:26 From: FILMAN at HP-HULK Subject: Page headings in the manual Class: Documentation The psl manual "swaps" the page and section numbers on left and right pages, but leaves the "PSL Manual" and section names unswapped. This is a bit confusing. RESPONSE(Kendzierski): This has been remedied in newer editions of the manual. Date: 25-Aug-82 13:40:16 From: FILMAN at HP-HULK Subject: "bug" function Class: Bug The (bug) function gives an access failure (and dies in emode) The function defstructp is undefined. Date: 22-Aug-82 13:45:20 From: PAULSON at HP-HULK Subject: SUBSTRING Class: Complaint, documentation deficiency In INTERLISP, (SUBSTRING STR N M) gives you the Nth through Mth elements of the string. Makes sense, right? And in ZLisp, (NSUBSTRING STR N M) gives you the (N+1)th through (M+1)th elements. Fine- ZLisp does zero-indexing. But in PSL, (SUBSTRING N M) gives you the (N+1)th through Mth elements. This does not make sense at all (and it isn't documented either.) RESPONSE (Eric) SUBSTRING in PSL is exactly the same as SUBSTRING in Zetalisp, except that the END argument is required, not optional, and the AREA argument is not used. Date: 20 Aug 1982 17:34:58-PDT From: Martin.Griss Subject: [Norman.kentvax at UDel-Relay: psl stray queries] Class: Miscellaneous this is a very initial bunch of psl queries/thoughts. it is also a test to see if i can get mail out of this vax & over to you lot. (a)i (a) on vax psl 'messages' and 'real output' get interleaved in what seems to be an assynchronous manner. at least i seem to get error messages all mixed in with the stuff i print, so the idiom print ; error 'stop here; is not as helpful as I would like. RESPONSE (Eric) VAX Unix terminal output has been changed to be line buffered to speed it up. This should have the side benefit of removing the interleaving of stdout and errout. (b) I have tried to use rlisp <) complained about the help package not being loaded even though I had called it from rlisp. RESPONSE (Eric) There were bugs in the help system which I believe have been fixed. HELP HELP; is still parsed incorrectly in RLisp, and that probably will not be fixed. (h) i suspect that often while in an break loop i want further errors ignored rather than letting them push me further into deeper break loops. I might be happy to have a break level that eats simple 1-char commands to continue, quit, backtrace with one char that pushes me into a brand new read-eval-print loop. for rlisp I guess that should be an rlisp r-e-p loop? RESPONSE (Eric) It has been suggested that there be an absolute limit on depth of break loops. In any case it seems clear that the break loop mechanism should be redesigned; this is far from the only complaint. I will try to collect further notes to pass on as I think of things: just put these somewhere in your big pile of gripes! Was good to see you in Pittsburg. cheers. arthur Date: 19-Aug-82 10:07:31 From: Alan Snyder Subject: WNOT Class: CMACRO Bug The *WNOT CMACRO produces bad code when its argument is an integer constant. For example, the expression (WNot 7) produces (SETCM (REG 1) 7), which computes the complement of the contents of register 7. RESPONSE (Eric) This case should be caught and evaluated in the first pass of the compiler. The CMACRO should never be used. Date: 19-Aug-82 09:35:24 From: LANAM at HP-HULK Subject: History list package Class: Deficiency When you do (hist), it tell you things like: 5 Inp: (HIST) Ans: NIL 6 Inp: Q Ans: NIL But it doesn't tell me that the Q on (inp 6) is a response to the break package, not the evaluation of the atom q. It also doesn't tell me that (ans 4) is nil because it never existed.{History is an undefined function}. RESPONSE (Eric) In general whenever a value is not returned by a function in the top loop, such as if an error occurs, NIL is put in the value position. Would it be preferable to put something else there, such as "Abnormal termination"? Date: 18-Aug-82 12:16:33 From: Alan Snyder Subject: Fast arithmetic and fast vector access Class: Compiler bug There is a serious PSL compiler bug relating to the interaction between fast arithmetic and fast vector access. In the following code, note that register 1 is clobbered by the MOVE instruction before it is used as an index register in the ADD instruction. (Possibly useful info: if the vector fetch is replaced by CAR, the compiler does the right thing, i.e., moves V to a free register before loading register 1.) PLEASE FIX THIS BUG!!!! ---------------------------------------------- (CompileTime (Load Fast-Vector)) (de test (v a) (WPlus2 (IGetV v 0) a)) ---------------------------------------------- (*ENTRY TEST EXPR 2) (*ALLOC 0) (*MOVE (REG 2) (REG 1)) (*WPLUS2 (REG 1) (MEMORY (REG 1) (WCONST 1))) (*EXIT 0) ---------------------------------------------- (MOVE (REG 1) (REG 2)) (ADD (REG 1) (INDEXED (REG 1) 1)) (POPJ (REG ST) 0) ---------------------------------------------- RESPONSE (Eric) I believe this bug has been fixed in the latest release from Utah. Date: 18-Aug-82 09:52:47 From: Alan Snyder Subject: PRINTX Class: Deficiency PRINTX apparently does not handle shared structures involving Vectors. RESPONSE (Eric) True. Don Morrison wrote a quick and dirty circular structure printer GRAPH-TO-TREE, obtained by LOADing GRAPH-TREE, which correctly handles circular vectors. Date: 15-Aug-82 12:36:13 From: LANAM at HP-HULK Subject: bug in macroexpand. HP-PSL 3.0, 12-Aug-82 1 lisp> (macroexpand '(setq a b c d)) (SETQ A B) The result should have been '(setq a b c d)). RESPONSE (Perdue): Right on expanding SETQ. There may be an associated compiler bug, too. RESPONSE (Eric) I fixed the source for MACROEXPAND. The compiler does its own processing and is not affected. Date: 14-Aug-82 18:59:24 From: LANAM at HP-HULK Subject: what does ($fluid :value) not compiled mean? Class: Inquiry I got this between two functions I compiled, but there was no code between the two function (and the declaration was pages earlier). thanks, douglas RESPONSE (Eric) "*** FOO not compiled" from the compiler means that FOO has no side effects and is used in a place where no value is required. The compiler does not issue code for such expressions. Date: 14-Aug-82 18:33:00 From: LANAM at HP-HULK Subject: Compiling variables in the CAR position Class: Inquiry, complaint HP-PSL 3.0, 12-Aug-82 1 lisp> (setq *comp t) T 2 lisp> (defun a (b) (b b)) *** Functional form converted to APPLY (B B) *** (A): base 412016, length 3 words A Why is it, if the function and argument have the same name, it gives me this message, but if I change either the name of the function or the argument, it doesn't give me this message? I don't think this message should pop up. Even if the function b was declared already. (defun a (b) (B b)) causes the system to think that b is a variable bound to a function. I think this is wrong. If I had wanted that I would have done (apply b (list b)) instead of (b b). RESPONSE (Perdue): (defun a (b) (b b)) is compiled heuristically. The compiler guesses whether the call on b is directly a function call or whether "b" is used as a function-valued variable. On the basis of local context it guesses b is a variable in function position. I'm sure it will be a low priority for fixing, since it is easily worked around. RESPONSE (Eric) This handling of variables in the function position goes against the accepted practice in recent Lisp systems. I made the decision to do it that way, but have gotten only complaints about it. (Of course those who like it that way probably wouldn't say anything about it unless it went away!) On reflection and further use I believe it should not have been done this way. It is also inconsistent with the Common Lisp definition. Should it be changed now? Date: 14-Aug-82 14:57:28 From: LANAM at HP-HULK Subject: (reset) should end a (faslout) If i do (faslout), get an error, and do (reset), I do not think the system should be in fasl mode any more. I think if I wanted to continue the (faslout), or save it, I would use the continue option of the break package, and not do (reset). douglas RESPONSE (Eric) FASLOUT sets a global variable and returns, rather than binding a fluid and doing the processing within that binding. One solution is to write a COMPILE-FILE function which binds *DEFN so that popping out will abandon processing. Date: 12-Aug-82 16:36:41 From: LANAM at HP-HULK Subject: READ Class: Bug do (let () (setq y (readch)) (unreadchar y) (read))word the system will return wORD note: that read normally changes all the characters in its word to upper case. But if the character was sent back to the input stream from unreadchar, its initial case remains and the atom that read interns has its first character in lower case if it was typed that way. The above should have returned WORD. The above is with *raise = t. douglas RESPONSE (Eric) This wsa due to a bug in READCH and has been fixed. By the way, UNREADCHAR is not the correct dual to READCH (in fact it is not currently defined). UNREADCHAR is the dual of READCHAR, which returns a character (integer) instead of an ID. Date: 12-Aug-82 16:27:30 From: LANAM at HP-HULK Subject: search in emode Class: Proposal I looked at the source to search.red in pe: and found that it does a very dumb search algorithm. The search algorithm should be replaced with the kmp algorithm which can be found in most data structures/algorithm books. I have a version running in lisp (but not fully compatible with emode functions) which I can send. The whole algorithm is about 20 lines of code. I also have a version in pascal which runs on my 9836 ( i debugged it on there when the hulk was down and moved it over. ---- I am including the whole algorithm in lisp slightly commented. This version to work with emode needs to convert some or the list of characters and vectors of character to vectors of ints, and needs to ignore case (this version does not ignore case). This code has been checked and works. I am using a variation of it in my program for my search through the history table. It runs much faster than the algorithm currently used in emode. If you wish to install it, I can help in debugging this part of the code and checking it works, if you can get someone else to interface it to the reset of emode and set up the correct accessing of emode data structures. douglas ----- %% %% Implemenation of Knuth_Morris_Pratt algorithm. %% %% %% p: input-pattern format vector of characters: %% '[a b c]. %% %% output failure link vector to be used by emode_kmp_scan. %% (defun emode_kmp_flowchart_construction (p) (let ((m (size p))) (let ((*flink (mkvect (iplus2 1 m)))) (iputv *flink 0 -1) (do ((i 1 (+ 1 i))) ((> i m) *flink) (do ((j (igetv *flink (- i 1)) (igetv *flink j))) ((or (eq j -1) (eq (igetv p j) (igetv p (- i 1)))) (iputv *flink i (+ j 1)))))))) %% %% p : input _string in vector format '[ a b c] %% m : upper bound of vector p (answer for above is 2). %% s : line of characters to be searched %% format list of characters: '(A b c d e . ..) %% *flink : failure link vector from emode_kmp_flowchart_construction. %% %% returns t if succeed, nil if not found. %% (defun emode_kmp_scan (p m s *flink) (and s (prog (j) (setq j 0) %% %% if next character does not match use failure links %% to back up and try again. %% loop (cond ((and (neq j -1) (neq (igetv p j) (car s))) (setq j (igetv *flink j)) (go loop))) %% %% if you have matched the entire pattern => succeed. %% (and (= j m) (return t)) (or (setq j (+ 1 j) s (cdr s)) %% %% move pointer in line, %% %% if no more line, fail. (return nil)) (go loop)))) Date: 12-Aug-82 11:06:18 From: LANAM at HP-HULK Subject: GO inside AND Class: Compiler deficiency The Psl compiler does not allow a go inside an and clause inside a prog. ex: 10 lisp> (defun xx () (prog () loop (and (go loop)))) ***** (GO LOOP) INVALID GO XX Thus causing me to have to say (cond (expression (go loop))) inside a prog when i want to say (and should be allowed to say): (and expression (go loop)) douglas RESPONSE (Eric) This use of GO within AND is in violation of Standard Lisp. There isn't a good reason for this restriction and it should probably be removed from the compiler. In the meantime, if you use (WHEN foo (GO xx)) instead of (AND foo (GO xx)), everything should be fine. Use of OR in this fashion should be replaced by (UNLESS foo (GO xx)). Date: 11 Aug 1982 0932-PDT From: JOHNSON at HP-HULK Subject: Documentation Bug Class: Documentation Bug Section 5.1, paragraph 2 of HP-PSL.R contains the meaningless sentence: "Some of the directories have no corresponding directory." Date: 10 Aug 1982 1620-PDT From: Kendzierski at HP-HULK (Nancy) Subject: REPEAT Class: Horrid documentation bug The manual states that the REPEAT construct (section 9.3; page 9.7) is repeated until the value of the expression is NIL. RESPONSE (Perdue): Actually, Nancy had quite a bit more to say, but the real problem is that the documentation for the LISP REPEAT is totally scrambled, though the RLISP documentation looks OK. Syntax for repeat is really: (REPEAT . . . ) The statements are executed until the condition becomes true. The condition is really and end-test. Date: 10-Aug-82 13:28:27 From: LANAM at HP-HULK Subject: word size Class: Inquiry Is there a function which returns the word size (number of bits) that logical operations operate on, built into psl? Date: 10-Aug-82 13:27:26 From: LANAM at HP-HULK Subject: bug in print and lshift. Class: Bug type the following to the top level of the psl interpreter on the 20. (lshift 2 34) You get an endless unstoppable output of hyphens. ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------... douglas RESPONSE (Eric) See response above to Norman. Date: 10-Aug-82 12:01:02 From: LANAM at HP-HULK Subject: addresses Class: Inquiry What function returns the address of a lisp object? What function takes an address (from above function) or some other int, and gives me the lisp object at that address? RESPONSE (Eric) The first operation can be done but is probably not advisable. There is no defined function to do it from the interpreter, but the macro INF can be used in compiled code by LOADing SYSLISP. The second probably cannot be done, since the tag defines the type of an object and is not recoverable from the address. (This may not be completely true, you can sometimes tell from the contents of the object). Perhaps you could explain why you want to do this, there may be some more appropriate operation. Date: 10-Aug-82 11:40:02 From: LANAM at HP-HULK Subject: documentation of compiled in line functions. Class: Suggestion They should be mentioned where their non compiled in line counterpart is. RESPONSE (Perdue): The fast arithmetic procedures that are compiled in line turn out to be described in the section on SYSLISP, section 21.4 in particular. Date: 10-Aug-82 11:37:05 From: LANAM at HP-HULK Subject: (maxint) => ??? Class: Inquiry Is there a function that return maxint and minint? also maxfloat, and minfloat? RESPONSE (Eric) Currently none. The Common Lisp definition says these are constant global variables (not exactly the same names, though). Date: 10-Aug-82 10:31:26 From: LANAM at HP-HULK Subject: bug in time with garbage collection Class: Bug, deficiency When *time = t, the system should report cpu and garbage collection time seperately, not as one total number. Cpu time: 496 ms. GC time: 2500 ms. not Time: 2996 ms. The current timing given is misleading. douglas RESPONSE (Eric) Currently GC time is not saved. It would be pretty simple to do, just a matter of choosing how. Date: 9-Aug-82 11:03:03 From: LANAM at HP-HULK Subject: Fast vector access Class: Bug I got the message: (memory ($local y) (wconst 19)) not compiled when I did: (defun xx (y) (do ((i 100 (sub1 i))) (eq i 0)) (igetv y 18))) RESPONSE (Perdue): Looks like a bug. Please use WGETV rather than igetv until we find out that igetv is for public consumption. I think they will do the same thing anyway. RESPONSE (Eric) This is not a bug! See the comment above on "*** FOO not compiled". If you want to have this compiled, you must do something with a side effect inside the loop. Date: 9-Aug-82 09:08:11 From: LANAM at HP-HULK Subject: fluid Class: Inquiry, documentation deficiency (fluid '(abc)) will set the value of abc to nil. Why? The documentation does not say that such a thing is done. It should leave abc as an unbound variable. douglas RESPONSE (Eric) This is in conformance with the Standard Lisp report. If it is not described in the PSL manual it should be. Date: 29 Jul 1982 17:39:24-PDT From: Tony Hearn Subject: Strange REDUCE bug Class: Bug If you do in REDUCE on the VAX: x := x+1; x; You SHOULD, I believe, get a "push down stack overflow" error. Instead, you go off into mystery (system seems to hang) and finally get an "illegal instruction" message and a core dump. RESPONSE (Eric) Stack overflow on VAX Unix is not handled well by the operating system. Franz Lisp has the same problem. Perhaps 4.2BSD will do a better job. Date: 26 Jul 1982 17:35:58-PDT from: lseward at RAND-UNIX Subject: PSL distribution files Class: News I am listing off sources and have been straightening out the vax-comp and vax-interp files. Suggestion: have subdirectories src, build, and bin and put the appropriate things in them. Otherwise the statement (in the documentation) "This directories contains sources for ..." is very misleading. larry Date: 13 Jul 1982 12:23:31-PDT From: Galway@UTAH-20 at HP-Speech Subject: break loop "feature" Class: Comment, proposal The current break handler inherits the reader, evaluator, and printer from whatever the current TopLoop uses (if TopLoop is being used). I suspect that this is a mistake, since it makes it awkward to deal with special "exotic" top loops. It's already somewhat confusing that depending upon the circumstances you will either get a LISP reader, or and Rlisp reader. Think about how wonderful it would be if your reader only returned vectors to be "evaluated" by adding them up (say, for a desk calculator or something). I suggest that instead we only have one, or maybe two, break loops. Default would use LISP's READ/EVAL/PRINT. And perhaps it should notice when Rlisp is in effect, and use its READ/EVAL/PRINT in that case. Comments? RESPONSE (Eric) Definitely. The break loop is all wrong. Lets redo it. Date: 25 Jun 1982 2106-PDT From: LANAM Subject: package proprosal Class: Proposal I would like the system to remember the package definition name of a variable and functions in .b files so that I dont' get the system binding files which were compiled in package a but loaded in package b refering to package b functions when a package is not specified. Just binding everything to global would not work since then it would be a nuisance to have to always write out a local package name in a file on every function and variable. (This is a proposal to send along with any bug reports to martin). douglas RESPONSE (Eric) Packages are not fully integrated into the system. This will probably have to wait for a redesign of PSL to include packages in the kernel. Date: 6-Aug-82 14:09:27 From: LANAM at HP-HULK Subject: bug with *time Class: Bug If the first thing you say to psl is (setq *time t) you get back Time: 211392 ms (or some such large number). RESPONSE (Eric) True. Date: 4 Aug 1982 01:36:20-PDT From: daemon at HP-Speech From: Tony Hearn Subject: PSL cannot read bignums correctly The source for the bigfloat package contains bignums. It does not seem to read or maybe compile correctly. Can PSL currently read bignums? RESPONSE (Griss): PSL can read bignums with BIG loaded. Without it, bignums will not be read correctly. It is probably true that bignum constants cannot be compiled in either case. RESPONSE (Eric) This has been fixed completely. Date: 27 Jul 1982 16:18:52-PDT From: Martin.Griss Subject: ExitTopLoop Class: Proposal Id like to add and ExitTopLoop comand, eg !$exitTopLoop!$ as distinguided atom? Or some such, perhaps have on property list of atom and action function, ala Break, perhaps using toploop name as key? GET(InputValue,ModuleName,...). Date: 27 Jul 1982 1058-PDT From: BATALI Subject: Easy file reading Class: Complaint There ought to be an expr to read a file. The only way to do this now is something like: (eval `(dskin ,filename)) I see no reason why dskin should not be an nexpr: virtually all present uses of it use string arguments so it wouldn't matter. L&C, John RESPONSE (Eric) Definitely. Let's make DSKIN an EXPR with ONE argument, since that's all it's used for 99.99...% of the time. Incompatible with some existing code? Date: 27 Jul 1982 16:19:23-PDT From: Martin.Griss Subject: VAX QUIT Class: Proposal, response I think QUIT should have an associated function, FullStop or some such. (Or have 2 low level functions, QuitAndKeep, QuitAndKill), and let system admin choose which QUIT is which. Date: 25 Jun 1982 1948-PDT From: LANAM Subject: VAX cntrl-d Class: Bug Type cntrl-d (eof) as the first character, and the system will go into an endless loop. douglas Date: 26 Jul 1982 17:36:09-PDT From: Eric Benson Subject: VAX QUIT Class: Response, comment Perhaps it's a misfeature. The alternative is to make (QUIT) irrevocable. Reading EOF will cause the PSL process to terminate, which allows the use of shell scripts and/or I/O redirection. If you want to do that from the terminal, type one or more ^Ds. Date: 26 Jul 1982 17:35:51-PDT Subject:VAX QUIT From: hearn at RAND-RELAY Class: Comment, complaint When you do (quit) to psl, you get the message "stopped", and you have a job sitting there. My UNIX guys say this is a bug, and should be fixed. I know that you can restart the stopped job, but apart from that facility, the stopped job does get in the way every so often. Furthermore, when I try to do "time preduce", I can't get the timing info out. RESPONSE (Eric) The function (EXITLISP) has been added to the VAX Unix version and should be in the next edition of the manual. It calls the Unix subroutine exit(), which will kill off the process as you wish. Date: 29 Jul 1982 1412-PDT From: BATALI Subject: Use of variables w. same name as functions Class: Bug, comment, complaint The function: (defun or-list? (list predicate) (cond ((null list) nil) ((funcall predicate (car list)) t) (t (or-list? (cdr list) predicate)))) Is T if any of the predicate applied to any of its elements is T. It works fine interpreted, but the compiler goes into an infinite loop printing: Functional form converted to (APPLY PREDICATE (LIST (CAR LIST))) Not a pretty sight. Ghastly, John RESPONSE (Perdue): This bug is due to use of "list" as both a local variable and a function, and it occurs even though "list" is not explicitly used as a function here at all. The problem is inherent in any LISP that allows variables in the "function position" and has both a variable and function binding cell for atoms. RESPONSE (Eric) See previous comment. Date: 6-Aug-82 10:31:49 From: LANAM at HP-HULK Subject: structure of variable historylist* Class: Inquiry, complaint why is the car of history an endless structure: (historylist* (historylist* (historylist* (historylist* .... the (caddr historylist*) is also this strange structure. isn't there a simplier structure that could be used? douglas RESPONSE (Eric) This only happens when you try to get the value of historylist* from the top loop! Of course it becomes circular. It's really just an a-list of inputs and outputs. Date: 5-Aug-82 16:20:10 From: LANAM at HP-HULK Subject: + and - as start of atom names. Class: Request It would be nice if the scanner was changed such that if + and - are followed directly by an alphabetic character, (ex +a), then an atom is returned ( +a ), instead of two atoms (+ and a). douglas RESPONSE (Eric) Yes, it would be nice. This will require a rewrite of the token scanner. Perhaps we can get Lisp code from CMU for the Common Lisp token scanner. Date: 5-Aug-82 16:05:15 From: LANAM at HP-HULK Subject: (eval and macros) Class: Inquiry, bug is there any reason the following should produce different results: (eval expression) and (eval (macroexpand expression)) I have an example (a bit hairy and long), where the second is correct and the first gives a strange error message about trying to set the number 2. could someone spend some time to look at this to decide what may be the problem. thanks, douglas Date: 5-Aug-82 15:37:32 From: LANAM at HP-HULK Subject: can the sytem just break instead of halt when bps size is exceeded? Class: Inquiry, request Date: 5-Aug-82 15:23:44 From: LANAM at HP-HULK Subject: what is bps? I got error ? fatal error : bps exhausted during faslout. and the system aborted. what happened? RESPONSE (Perdue): You ran out of space for compiled code. PSL provides no information about the sizes of spaces, so far as I know. I'm very interested in this myself, and I don't even know the initial sizes of most of the spaces. Binary program space is not reclaimed. Maybe someday it will be. RESPONSE (Eric) Yes, this will require a redesign of low-level storage allocation in PSL. Date: 5-Aug-82 15:09:07 From: LANAM at HP-HULK Subject: package system and faslout/faslin Class: Comment, advice faslout/faslin known nothing about the package system, and will produce a file that can not be read in successfully, if that file references variables in packages. (usually you will get an operating system error (illegal instruction)). The manual's suggestion to rename functions in global is not a real solution, and suggests further that the package system is not really usuable in a real sense yet. This section of the system is not finished and I do not feel is in a useful enough state to be advertised or included in the manual. douglas RESPONSE (Eric) Totally true! Date: 5-Aug-82 13:05:17 From: Cris Perdue Subject: Unwanted PSL messages Class: Response To not get bothered about redefining system functions, set the global flag *usermode to NIL. The flag *redefmsg determines whether you are told when functions are redefined. There is currently no way to get a quiet dskin, except modifying the code or writing your own. I don't know if you can turn off the "*** blah already loaded" message. There is no mechanism established for forcing the system to reload a library module unless you specify "pl:" as the location of the module. RESPONSE (Eric) There is currently no way to turn off the *** ... already loaded message. It mostly generates more heat than light, perhaps it should just be removed? Date: 5 Aug 1982 1259-PDT From: Cris Perdue Subject: Re: start up file. Class: Response No, there is no "init file". We have had several requests for that feature, so perhaps it can be added soon. RESPONSE (Eric) Yes, init files would be nice. They do require some system dependent primitives, especially the ability to find the home directory of a user. Not a hard job, but the primitives should be specified before doing it. Date: 5-Aug-82 08:31:23 From: LANAM at HP-HULK Subject: tr bug Class: Request tr shouldn't ask me how many arguments a compiled function takes. Why can't it just create a nexpr instead and not worry about the number of arguments? (sometimes I don't feel like looking up the answer to this question). RESPONSE (Eric) Code blocks should include the number of arguments they expect so that this query needn't happen. Date: 5-Aug-82 14:02:21 From: LANAM at HP-HULK Subject: FASLOUT Class: Bug, deficiency (faslout) during (faslout) should not be executed. (it currently is). douglas RESPONSE (Eric) Fixed. Date: 3-Aug-82 15:22:56 From: LANAM at HP-HULK Subject: bug with faslout/faslend. do (faslout "foo") then do something to cause an error, (any error or break will do). such as: (eval-when (compile) (+ 'a 'b)) {actually macros can cause errors, as can any eval-when construct}. If you do (faslend) in the break point, then (reset), the system will only echo your input after that. If you do (faslend) again, an error (illegal instruction) occurs, and psl will halt. Date: 3-Aug-82 15:13:55 From: LANAM at HP-HULK Subject: package/compiler/fasl bug Class: Fatal bug With the following file (called a.lisp), do the following and you will get illegal instruction. (load package) (faslout "A") (dskin "a.lisp") (faslend) (faslin "a.b") file a.lisp: ----------- (\load \package) (\setpackage '\global) (eval-when (compile) (createpackage 'franz 'global) (setpackage 'franz)) (createpackage 'franz 'global) (setpackage 'franz) (eval-when (compile) (localintern 'franz\xx)) (de franz\xx (yy) yy) Date: 2-Aug-82 15:43:38 From: BATALI at HP-HULK Subject: TYPE function Class: Request It would be just dreamy if there were a function TYPE, which returns an ID signifying the type of its argument: (type 'foo) => ID (type 5) => FIXNUM (type '(a b)) => PAIR Etc. RESPONSE (Perdue): Yes, probably named TYPEP, as in Common LISP. See similar requests made very early. Date: Fri Jul 30 14:04:39 1982 From: John Tupper (hp-pcd) Subject: TR Class: Bug Vax psl bug: When the debug package is loaded, the normal trace functions don't work correctly. After loading the debug stuff, (UNTR) does not restore the original definition of the function. (TR) works fine, and (UNTR) will cause tracing to halt; it just doesn't restore the original definition. maddog RESPONSE (Eric) The "standard" PSL TR function is very poor. The 20 and Vax systems should be changed to autoload DEBUG instead of using this brain-damaged version. Date: 30-Jul-82 15:41:22 From: Alan Snyder Subject: EMODE cursor movement Class: Bug EMODE (on the HP2648 at least) fails to check for attempts to move the cursor off the right edge of the screen. For example, if you type in a line that is longer than the screen width, the cursor will move to the next line and occasionally random stuff will come out (parts of escape sequences, it looks like). Date: Fri Jul 30 11:40:05 1982 From: tw cook (hp-pcd) Subject: testing 'bug' function - ignore Class: News I have implemented the 'bug' function in our PSL - it just fires up 'mail' to PSL, which forwards both to PSL at labs and to the notesgroup LISPERS here. Those of you at hplabs who are listening - does stuff mailed to PSL@HULK get eventually sent on to Griss & crew? Should I mail to them as well? If so, how do I get there (via mail)? Thanks, tw Date: 30 Jul 1982 11:28-PDT (Friday) From: Ching-Chao.Liu Subject: FUnboundP Class: Manual bug On page 10.4 of psl manual, the description of FUnBoundP is incorrect. It should be Tests whether there is a definition in the function cell of U; returns NIL if there is a definition, T if not. Date: 27-Jul-82 16:38:49 From: LANAM at HP-HULK Subject: break package Class: Comment In a break package, if I have a variable i (or q, c, r, m, or e), and want to print its value, i need to do (eval 'i) RESPONSE (Eric) Yes, it's clumsy. Break loop needs reworking (actually starting over). See other previous comments. From: Alan Snyder Subject: PSL bug Class: Deficiency The ContError macro is not very robust. For example, consider the following expansion (admittedly, the argument is improper): (MacroExpand '(ContError 0 "" file-name file-name)) ==> (CONTINUABLEERROR 0 (BLDMSG "" FILE-NAME) (LIST '#)) Naturally, this form will cause the garbage collector to barf. When the compiler is given this sort of stuff, it produces the following lovely code: ------------------------------------------------------------ Compiling TEST Source Code: (LAMBDA (FILE-NAME) (TEST1 (CONTERROR 0 "s" FILE-NAME FILE-NAME))) ------------------------------------------------------------ Expanded Source Code: (LAMBDA (FILE-NAME) (TEST1 (CONTINUABLEERROR 0 (BLDMSG "s" FILE-NAME) (LIST '#)))) ------------------------------------------------------------ Object Code: (*ENTRY TEST EXPR 1) (*ALLOC 1) (*MOVE (REG 1) (REG 2)) (*MOVE '"s" (REG 1)) (*LINK BLDMSG EXPR 2) (*MOVE (REG 1) (FRAME 1)) (*MOVE '# (REG 1)) (*LINK NCONS EXPR 1) (*MOVE (REG 1) (REG 3)) (*MOVE (FRAME 1) (REG 2)) (*MOVE '0 (REG 1)) (*LINK CONTINUABLEERROR EXPR 3) (*LINKE 1 TEST1 EXPR 1) L0003L0004 (FULLWORD 0) (STRING "s") (*ENTRY TEST EXPR 1) (ADJSP (REG ST) 1) (MOVE (REG 2) (REG 1)) (MOVE (REG 1) "L0001") (PUSHJ (REG ST) (ENTRY BLDMSG)) (MOVEM (REG 1) (INDEXED (REG ST) 0)) (MOVE (REG 1) "L0002") (PUSHJ (REG ST) (ENTRY NCONS)) (MOVE (REG 3) (REG 1)) (MOVE (REG 2) (INDEXED (REG ST) 0)) (SETZM (REG 1)) (PUSHJ (REG ST) (ENTRY CONTINUABLEERROR)) (ADJSP (REG ST) -1) (JRST (ENTRY TEST1)) L0002 (FULLWORD (MKITEM 10 "L0003")) L0001 (FULLWORD (MKITEM 4 "L0004")) *** Function `TEST' has been redefined *** (TEST): base 374744, length 17 words ------------------------------------------------------------ There is no warning message of any kind. However, when the compiled code is loaded and executed, it will also create bad data that the garbage collector will barf on. RESPONSE (Eric) Fixed. See BUG-FIX.LOG Date: 27 Jul 1982 1638-PDT From: LANAM at HP-HULK Subject: break package problem Class: Deficiency In a break package, if I have a variable i (or q, c, r, m, or e), and want to print its value, i need to do (eval 'i) RESPONSE (Eric): Same as above. Date: 27 Jul 1982 1629-PDT From: LANAM at HP-HULK Subject: string "123" => 123 conversion function needed? Class: Inquiry Is there a function that will convert "123" into the number 123, or "12.4e2" into the number "12.4e2" ? RESPONSE (Eric): A read-from-string function should be implemented. It should be quite easy. Date: 27 Jul 1982 1439-PDT From: LANAM at HP-HULK Subject: br Class: Inquiry If i use br, How do I continue from a break level. I tried every letter given by ?. 'R' gave an error, something about nil undefined. 'c' did something similar. 'q' went to top level. douglas RESPONSE (Eric) BR has never worked right. It should be removed along with TR in MINI-TRACE Date: 27 Jul 1982 1433-PDT From: LANAM at HP-HULK Subject: untr Class: Deficiency untr does untrace a function, but unlike the manual says, it does not restore the original definition. It leaves a strange lisp function around which is similar to the function when it is traced. It would be nice if the functions definition was restored to its original place. RESPONSE (Eric) Yes, UNTR in DEBUG doesn't remove the tracing function, it just suppresses the tracing. The function to resore it to its original state is RESTR, as described in the manual in section 16.10. Date: Mon Jul 26 15:10:41 1982 In-real-life: Tw Cook Subject: psl bug? Class: Bug In the Vax version: If you run (help emode) [or any long help] then do a control-C to try and interrupt it, you get thrown into a break loop which I have not been able to exit from. Is this an error in the help code, rather than in psl itself? RESPONSE (Eric) The interrupt handler on the VAX has some strange behavior I have not been able to track down. Date: 26 Jul 1982 1520-PDT From: LANAM at HP-HULK Subject: bad feature : read macros on property list. Class: Deficiency By having the function associated with read macros stored on the property list, there is an inability to have different read macros in different read tables, for the same character. douglas RESPONSE (Eric) True. The whole input/output subsystem is very poor, for which there's no one to blame but me. See previous comments about the token scanner. Date: 26 Jul 1982 1155-PDT From: Alan Snyder Subject: EMODE bug Class: Bug EMODE believes that ^Z marks the end of a text file. RESPONSE (Eric) PSL uses a character as the EOF marker, which happens to be ^Z on the Dec-20. Any file with a ^Z in it will not be read correctly. Date: 24 Jul 1982 1044-PDT From: LANAM at HP-HULK Subject: scanner read bug with numbers. Class: Bug 45 lisp> 1.000000000000000000000000000000000000000000000000000 0.0 46 lisp> 1.222222222222222222222222222222222222222222222222222222 1.7682604E33 47 lisp> 100000000000000000000000000000000000000000000000 0 48 lisp> 2222222222222222222222222222222 2386092942 49 lisp> 1000000000000000000000 25209864192 50 lisp> 1000000000000 3567587328 douglas FIXED (Benson): Actually, just a crude patch that should improve things. Date: 24 Jul 1982 1043-PDT From: LANAM at HP-HULK Subject: can prettyprint do better than this with the following please? Class: Request (DEF FRANZ\FACT (EXPR LAMBDA (N) (COND ((EQ N 0) 1) (T (* N (FRANZ\FACT (!- N 1)))) ))) I would like the cond split up into 2 lines (one per clause). Date: 23 Jul 1982 1738-PDT From: LANAM at HP-HULK Subject: apply on macros. Class: inquiry Is there an apply that works on any function (whether the function is a macro or not), and acts the same whether the function was written as a macro or an expr or a fexpr? This would be very useful (especially with the number of basic functions written as macros in psl). RESPONSE (Eric) The function you want is EVAL, not APPLY. APPLY is meant to be a primitive operation which does no evaluation. Date: 23 Jul 1982 1718-PDT From: LANAM at HP-HULK Subject: how easy is it to redefine the psl reader? Class: inquiry Is there a table describing the automaton? Or is it hardwired in? Is the table accessable in lisp and changable? This would be very useful. RESPONSE (Eric) It is hardwired in. See previous comments on the token scanner. Date: 23 Jul 1982 1715-PDT From: LANAM at HP-HULK Subject: identifiers starting with numbers Class: request I would like the system to read an atom like 1+ as the atom |1+|, not the number 1 and the atom +. How can I teach the system to handle this? 1a would be an atom. 1 a would be the number 1 followed by the atom a. I need this feature to handle a franz conversion since a basic franz function is 1+ and 1-. douglas RESPONSE (Eric) Likewise. Date: 23 Jul 1982 1657-PDT From: LANAM at HP-HULK Subject: identifier bug. Class: Deficiency Characters and identifiers should be separate entities. The character c and the identifier c are not the same thing. Currently in the system, it is possible to intern a single character-name identifier into a package, but it is impossible to type its name back in. (setpackage 'franz) (localintern 'a) => franz\a (Setq franz\a 3) will set global\a (set (localintern 'a) 3) will set franz\a. franz\a is interpreted as global\a. I should be able to have my franz\a. douglas RESPONSE (Eric) Single character identifiers are treated very specially in PSL. Since packages are not integrated, they cannot be interned in packages other than GLOBAL. Date: 21 Jul 1982 16:48:33-PDT From: hearn@RAND-RELAY at HP-Speech Subject: Readch() Class: Inquiry, Bug Readch does not do case conversion, irrespective of the setting of *raise. If *raise is on, shouldn't lower case be converted to upper case? RESPONSE: Date: 21 Jul 1982 16:48:40-PDT From: BENSON@UTAH-20 at HP-Speech Subject: Re: Question on readch() I've changed the source for ReadCh so that it does case conversion on *Raise. This bit of Standard Lisp compatibility seems to have slipped through the cracks until now. I guess ReadCh just isn't used that much. Date: 21 Jul 1982 1549-PDT From: Alan Snyder Subject: UnBoundP Class: Documentation deficiency The function UnBoundP should be described (or mentioned) in the chapter on Identifiers. Date: 21 Jul 1982 1422-PDT From: Alan Snyder Subject: DEFSTRUCT Class: Deficiency Using DEFSTRUCT (from NSTRUCT) causes the PSL compiler to produce "function redefined" messages. As far as the user is concerned, these messages are spurious and should be suppressed. Date: 21 Jul 1982 1253-PDT From: Alan Snyder Subject: "Constant" list structure Class: Deficiency, comment PSL allows a program to modify "constant" list structure that has been created by the compiler in the code space. Since this "constant" list structure is not scanned by the garbage collector, any pointers inserted into it will not be updated when garbage collection occurs, and will henceforth point to randomness. PSL should use the address protection provided by the hardware to prevent modification of "constant" list structure. RESPONSE (Benson): It is incorrect to modify list structure constants. They are placed in code space on the VAX when a dumplisp is done. Date: 21 Jul 1982 1127-PDT From: Alan Snyder Subject: Unhandled THROW Class: Deficiency, documentation bug The manual (section 9.4) says that an unhandled THROW is treated as an ERROR in the context of the THROW. In fact, what happens is that PSL is restarted at top-level. I would prefer that it behave as the manual describes. RESPONSE (Eric) It's very hard to fix with the current implementation of CATCH. Date: 16 Jul 1982 0244-PDT From: BATALI Subject: Compiler bug Class: Bug Here is an interesting function: (de c3 () (cond ((= 3 3) 'yes) (t (= 3 3)))) Interpreted: (c3) YES Compiled: (c3) T Obviously the compiler is doing something grossly clever, obviously it is doing it wrong. --John Date: 16 Jul 1982 0237-PDT From: BATALI Subject: Compiler bug Class: Bug, deficiency The compiler doesn't enforce the restrictions on the placement of RETURN statements. (See pages 9.4 and 9.5 of the manual.) This function gets an error if interpreted, but returns its argument when compiled: (de just-return (arg) (return arg)) Actually, the compiler ought to complain about this one. --John Date: 16 Jul 1982 0149-PDT From: BATALI Subject: RPLACHAR (String package) Class: Bug, compiler bug The function RPLACHAR stores a character into a string. It works fine in interpreted code, but when called from a compiled function, we get: ***** Undefined function STRINF called from compiled code Looking on the property list of RPLACHAR, we notice a CMACRO property whose value is: (LAMBDA (S I X) (PUTSTRBYT (STRINF S) I X)) Which seems to be where the call to STRINF comes from. Giving RPLACHAR a CMACRO property of nil "fixes" the problem. --John RESPONSE (Eric) Fixed. Date: 15 Jul 1982 1258-PDT From: Alan Snyder Subject: EMODE C-M-B Class: Bug, comment C-M-B (backwards s-expr) loses if the corresponding left paren is the first character in the buffer: it leaves the cursor to the right of the paren. There is explicit code that makes this adjustment, and this code is marked in the source as being a "KLUDGE!". I don't know why this kludge is there. Date: 14 Jul 1982 1404-PDT From: Alan Snyder Subject: STRING< (String package) Class: Bug The function STRING< in STRINGS.LSP has the interesting property that both of the following forms evaluate to NIL: (string< "b" "aa") (string< "aa" "b") This anomoly results from the improper testing of string length in the function. The other string comparison functions seem to have the same bug. [This seems to have been fixed.] Date: 14 Jul 1982 0759-PDT From: Alan Snyder Subject: EMODE bug Class: Bug I fixed a bug in REFRESH.RED: ClearWindow() previously failed to clear the associated virtual screen, causing the old contents to later reappear in place of empty lines. Date: 13 Jul 1982 1739-PDT From: Cris Perdue Subject: FIND module Class: Documentation deficiency The "find" module is not loaded in bare PSL, but the documentation does not mention the fact. Date: 13 Jul 1982 1144-PDT From: Alan Snyder Subject: FindPrefix, FindSuffix -- request Class: Request FindPrefix and FindSuffix should convert their string argument to upper case. Date: 13 Jul 1982 1140-PDT From: Alan Snyder Subject: PrettyPrint Class: Request For direct use by a human, it would be better if PRETTYPRINT returned NIL, instead of its argument. That way, the user doesn't have to see the same object printed twice by the Read/Eval/Print loop. Date: 13 Jul 1982 1120-PDT From: LANAM Subject: Interning with the package system Class: Inquiry How can I get the package-specifier prefix in a string and concat it with other strings, and then intern it. I tried, and the package-specifier prefix character got an escape character inserted before it. RESPONSE (Benson): Can't be done. Date: 13 Jul 1982 1114-PDT From: Alan Snyder Subject: COND Class: Deficiency COND behaves differently in some cases depending upon whether it is interpreted or compiled. An example is provided by the following function: (de foo (a) (cond ((= a 3) 4) a)) If interpreted, FOO will return the parameter A unless A is 3. If compiled, FOO will return NIL in those same cases. The compiled code is shown below: ------------------------------------------------------------ Compiling FOO Source: (LAMBDA (A) (COND ((= A 3) 4) A)) ------------------------------------------------------------ Object: (*ENTRY FOO EXPR 1) (*ALLOC 0) (*JUMPNOTEQ (LABEL G0004) (REG 1) '3) (*MOVE '4 (REG 1)) (*EXIT 0) (*LBL (LABEL G0004)) (*MOVE 'NIL (REG 1)) (*MOVE 'NIL (REG 1)) (*EXIT 0) *** Function `FOO' has been redefined *** (FOO): base 334750, length 7 words ------------------------------------------------------------ Date: 13 Jul 1982 1056-PDT From: Alan Snyder Subject: ErrorSet Class: Deficiency ErrorSet is currently implemented as an EXPR. This fact has the subtle, yet critical effect that the form enclosed in the error set can only use fluid variables. If you don't declare the variables fluid, the code will work interpretively, but will execute incorrectly when compiled. No warning is given by the compiler, nor is there any hint in the manual that this problem exists. Note: the file directory.sl that we sent to Utah fails when compiled for this reason. I suggest you send a message to Will about this. RESPONSE (Eric) Yes, this is also true of CATCH. I have implemented *CATCH which is a special form and open-compiles. It will be easy to define ERRSET as a macro or special form now. Date: 13 Jul 1982 1045-PDT From: BATALI Subject: Readmacros Class: Deficiency, comment I've been experimenting with read macros in PSL. None of the advertised functions for creating them exist, but the following works: (defmacro define-read-macro (table id fname) `(progn (put ',id 'lispreadmacro ',fname) (putv ,table (id2int ',id) 11) ;; delimiter ',id)) This does what PutReadMacro is supposed to do (but it doesn't evaluate the id or the fname). Note how this seems to work: If the reader (actually, the function ChannelReadTokenWithHooks) sees a character with code 11 in the scantable, it looks for the LISPREADMACRO property on the id corresponding to the character. If there is one there, it applys it in place of ChannelReadTokenWithHooks to the input channel. This would be fine and not very interesting and I certainly wouldn't be sending you this long message if it weren't for the fact that this scheme means you can't "bind" a scantable and expect different behaviour from characters. This is because, although the scantable can be bound, the system still looks for the LISPREADMACRO property of the id. So it is not possible for a character to have different properties on different scantables. Thus: (define-read-macro somerandomscantable* !( ChannelTotallyTrashSystem) Would lose no matter which scan table is currently in effect. We need the ability to pair characters with functions in particular scantables only. It is very likely that the PSL people understand this, and indeed, the relevant sections of the manual (pp 13.10 - 13.11 and 13.18) seem to claim that this is what ought to go on. --John RESPONSE (Eric) This was reported earlier (actually later because this is in reverse chronological order). Date: 13 Jul 1982 1030-PDT From: BATALI Subject: Unwind-Protect Class: Suggestion Here is the code for unwind-protect. It has the same semantics as the lisp-machine version (except in interpreted code that happens to use the variable unwind-protect-value). The only problem is the problem with catch being an EXPR. (defmacro unwind-protect (protected-form . undo-forms) `(let ((unwind-protect-value (catch nil ',protected-form))) (progn . ,undo-forms) (if throwsignal!* (throw throwtag!* unwind-protect-value) unwind-protect-value))) Date: 12 Jul 1982 1836-PDT From: BATALI Subject: Dipthongs Class: Inquiry, documentation deficiency What are dipthongs? Why are they neat? How do I use them? Why aren't they documented? Date: 12 Jul 1982 1145-PDT From: Cris Perdue Subject: EMODE terminal handling Class: Deficiency EMODE does not use the terminal driver that corresponds to TOPS-20's idea of what the terminal type is. It just uses whatever terminal driver is loaded (HP2648A in our case). Date: 12 Jul 1982 1102-PDT From: Johnson Subject: PSL String Package Class: Request, remark A routine to convert from STRING to INTEGER would be nice. The SUBSTRING function is peculiar: its last argument is one greater than the index of the last character to be extracted, even given that indexes begin at zero! Date: 9 Jul 1982 1456-PDT From: Alan Snyder Subject: PSL internal bug Class: Bug The following example demonstrates a bug in PSL. It is the shortest example I could find, derived from a real attempt at compiling a file. The offending object is a machine instruction, the exact identity of which changes with different programs. In this case, it is "CAMN 0(17)". The example is highly sensitive to change. For instance, if the function name is changed to "FOO", no error is reported. Similarly, no error is reported if any of the loaded modules are omitted. ------------------------------------------------------------------------------- @psl:bare-psl PSL 3.0, 9-Jun-82 1 lisp> (load emode common jsys) NIL 2 lisp> (faslout "nul:") FASLOUT: (DSKIN files) or type in expressions When all done execute (FASLEND) T 3 lisp> (de fooo (name) 3 lisp> (let ((n (string-length name))) 3 lisp> (cond ((= (indx name (- n 1)) (char >)) 3 lisp> (concat name "*.*.*")) 3 lisp> name))) FOOO4 lisp> (faslend) *** Init code length is 1 **FASL**INITCODE**NIL 5 lisp> (reclaim) ***** Fatal error during garbage collection Illegal item in heap at 502462 ------------------------------------------------------------------------------- Date: 30 Jul 1982 11:27-PDT (Friday) From: John.Tupper Subject: bug report I have found a bug in the vax version of the psl zpedit. When I add something to the end of an s-expression [with the n command] the editor changes the old last expression to nil. start: (LIST (CAR X) (CDR Y)) execute: (N (BOGUS BO GUS)) finish: (LIST (CAR X) NIL (BOGUS BO GUS)) The same thing happens with the bo command. start: (LIST (CAR X) (CDR Y)) execute: bo 3 finish: (LIST (CAR X) NIL) icky-poo, maddog Date: 9 Jul 1982 0948-PDT From: SOREFF at HP-THOR Subject: Structure editor "A" command Class: Bug I've constructed an example of how the "(a s-expression)" command in the structure editor can fail. It seems to fail when one is adding an item after the last expression in a list. I've edited the log slightly, removing blank lines to make it more compact. @take psl PSL 3.0, 9-Jun-82 1 lisp> (load zpedit) NIL 2 lisp> (setq a '(b c d e f g)) (B C D E F G) 3 lisp> (editv a) EDIT -E- p (B C D E F G) -E- 3 p D -E- (a z) 0 p (B C D (Z) E F G) -E- 7 p (a y) 0 p G (B C D (Z) E F NIL (Y)) -E- pp (B C D (Z) E F NIL (Y)) -E- 8 p (Y) -E- (a x) -E- p ... NIL (X)) -E- ^ -E- p (B C D (Z) E F NIL NIL (X)) -E- ok A 4 lisp> (quit) Date: 9 Jul 1982 0938-PDT From: Alan Snyder Subject: DOLIST Class: Bug DOLIST (in PU:COMMON.SL) fails to bind the loop variable. Date: 8 Jul 1982 1447-PDT From: Alan Snyder Subject: EMODE C-M-B Class: Bug, deficiency EMODE C-M-B (backward sexpr) gets excessively confused by comments. For example, when at the end of the following text (setq a b) %%%%%%%%%% C-M-B will stop at the "b". (Probably other commands have similar problems.) I think the reason for this is that '%' (the comment character) is ignored by scan-word by not by skip-blanks. Thus in the implementation of C-M-B, skip-blanks skips back to the '%', and then skip-word skips back to the 'b'. The probable fix would be to change the scan table. Date: 7 Jul 1982 1651-PDT From: SOREFF at HP-THOR Subject: Structure editor "N" command Class: Bug I think I've run into a bug in the PSL structure editor. The "N" command, which appears to be supposed to append an s-expression on the end of the current list, does that, but also changes the expression just before the added one to NIL. @login guest Job 5 on TTY152 7-Jul-82 4:41PM Previous LOGIN: 7-Jul-82 4:40PM @take logical-names @r bare-psl PSL 3.0, 9-Jun-82 1 lisp> (load zpede^F^Fit) ***** `ZPED^FIT' load module not found {99} Break loop 2 lisp break>> q 3 lisp> (load zpedit) NIL 4 lisp> (setq tst '(a b c d e f g)) (A B C D E F G) 5 lisp> (editv tst) EDIT -E- p (A B C D E F G) -E- (-3 z) p (A B Z C D E F G) -E- (n x) p (A B Z C D E F NIL X) -E- ok TST 6 lisp> (quit) Date: 7 Jul 1982 0929-PDT From: Alan Snyder Subject: NTH and PNTH Class: Bug The function NTH produces obscure error messages if the index argument is out of range. The error messages are obscure because (1) they refer to the function PNTH, which the user should have no need to know about, and (2) they report an index which is different than the value given in the call to NTH. [8/4/82 - This has been fixed.] A similar comment applies to PNTH: the error message reports an incorrect index value. [8/4/82 - This hasn't.] Date: 7 Jul 1982 0852-PDT From: Cris Perdue Subject: IN and EVIN Class: Documentation deficiency, bug IN and EVIN, available from RLISP, are not defined as functions. IN even has an entry in the manual, though there is no description of what it does (page 31.12). These should be available from LISP. Date: 6 Jul 1982 1212-PDT From: Cris Perdue Subject: RDS, WRS Class: Complaint RDS and WRS are virtually guaranteed to cause lossage concerning I/O channels, especially since there is no UNWIND-PROTECT in PSL. Date: 6 Jul 1982 1209-PDT From: Cris Perdue Subject: Debugging Class: Deficiency There are various deficiencies concerned with debugging. There is no genuine backtrace that uses the saved variable bindings, even for interpreted code. The error handling system is so portable that it evidently cannot use the DEC-20 APR trap mechanism, etc.. It is difficult to set up an interpreted version of a subsystem that is usually compiled. (This is a separate issue from the capabilities of the system internals.) In particular, facilities for requiring certain files to be present when a procedure is loaded for interpretive execution don't exist. Also functions for loading interpreted and compiled code are distinct, not to mention the additional distinct function for loading "system" files (files in pl:). Date: 6 Jul 1982 1041-PDT From: Johnson Subject: DSKIN Class: Inquiry (DskIn "foo.lsp") prints the values of all the forms evaluated in foo.lsp. Is there a silent version of DskIn? RESPONSE (Benson): Yes: LAPIN. Date: 2 Jul 1982 2335-PDT From: Cris Perdue Subject: DEC-20 REENTER and CONTINUE To: psl at HP-HULK On the DEC-20, ^C followed by REENTER or CONTINUE screws up badly for some reason. I would think they would just not be available commands. Date: 2 Jul 1982 2334-PDT From: Cris Perdue Subject: Debugger user interface Class: Bug The "break loop" does not establish echoing as it is entered. Date: 2 Jul 1982 2329-PDT From: Cris Perdue Subject: FINDPREFIX and FINDSUFFIX Class: Documentation deficiency, bug These are not loaded with the USEFUL library and there whereabouts is not documented in the manual, though they themselves are. They appear in pu:find.red. Date: 1 Jul 1982 1406-PDT From: Kendzierski (Nancy) Subject: CRLF variable Class: Bug, documentation bug The manual (page 20.2, section 20.3.1 "TOPS-20 User Level Interface") states that "a global variable, CRLF, is provided with the string. Attempts to use this global variable result in a CRLF is an unbound id {99} message from psl. RESPONSE (Benson): Loading the EXEC module defines CRLF. Date: 30 Jun 1982 1057-PDT From: Cris Perdue Subject: "FLAGS" Class: Inquiry, deficiency In Chapter 12 of the manual the RLISP "On" and "Off" constructs are discussed briefly. It appears that LISP users should not just set the corresponding global variables, because On and Off may have additional side effects. If this is true, there should be some easy way of doing On and Off in LISP. Date: 28 Jun 1982 1746-PDT From: Cris Perdue Subject: C-M-rubout in EMODE Class: Bug Sometimes (always?) goes into an infinite loop. Date: 28 Jun 1982 1714-PDT From: Kendzierski (Nancy) Subject: PSL logical names Class: Inquiry How come p20d: as isn't defined in the logical-names.cmd file? It is listed in the manual on page 22.2. Date: 6/23/82 From: Kendzierski Subject: !*SAVENAMES Where: Page 16.18 Class: Inquiry Why is !*SAVENAMES initially NIL? Date: 6/23/82 From: Kendzierski Subject: RCRef Where: Page 18.3 Class: Inquiry Is RCRef only available in RLisp? Why? or How is it used in Lisp? From: Kendzierski Date: 6/23/82 Subject: !*LOSE Where: Page 16.18 Class: Documentation deficiency !*LOSE -- what is this? It's constantly referred to, but never defined/explained Date: 6/23/82 From: Kendzierski Subject: #+ Where: Page 18.3 Class: Inquiry Why doesn't #+ accept three arguments? Because the third is optional? Date: 6/23/82 From: Kendzierski Subject: ANYREG Class: Inquiry If the most common adjust function removes ANYREG to eliminate looking for it in patterns, why have it? Date: 6/11/82 From: AS Subject: I/O channels Class: improvement, section 13.1, page 13.1 Why is a channel an integer instead of something more abstact? If you allow I/O to strings and lists, then why limit the maximum number of channels? Date: 6/11/82 From: AS Re: improvement, section 13.2, page 13.3 Using global variables to initialize channel functions when a channel is OPENed is poor. It would be better to define a separate OPEN-SPECIAL that takes additional arguments, or use a keyword init list a la Zetalisp. Similar comments about misuse of global variables apply elsewhere, e.g. DUMPLISP. Date: 6/11/82 From: AS Re: manual, section 13.6, page 13.13 PRINTF is an expr that takes a variable number of arguments. If this is possible then you should explain how users can do it. Date: 6/11/82 From: AS Subject: LISP vs. RLISP syntax Class: Inquiry, bug Where: manual, section 16.5, page 16.13 Can EMBEDding be done using Lisp syntax? If so, how? Can STUBs be defined using Lisp syntax? If so, how? Date: 6/11/82 From: AS Subject: EDITF Class: Bug, inquiry Where: manual, section 17.5, page 17.11 I was not able to achieve any effect by giving extra command arguments to EDITF. In any case, COMS:forms is not a defined type; it should be either [COMS:form] or COMS:form-list. Date: 6/11/82 From: AS Subject: FIELD, GETFIELD Class: Documentation deficiency Re: manual, section 21.2.8, page 21.7 Is the field accessing function FIELD or GETFIELD? Both names are used in the manual. Neither name is defined in our PSL. Date: 6/25/82 From: Filman Subject: READ, Interactive input Class: Feature request It would be very nice to have some way of telling PSL to consider all open parens to be closed, like right square bracket ("]") in some LISPs. It would also be nice not to get an error message whenever one types excess right parentheses. Date: 6/25 From: Perdue, Griss, AS Subject: Common-LISP compatibility library Class: Documentation bug The Common-LISP compatibility library has been split into 2 parts: a compatible part which redefines no PSL functions, and an incompatible part that does. The incompatible part is PL:CLCOMP. Date: 18 Jun 1982 From: SOREFF at HP-THOR Subject: Module loaded test Is there any predicate which checks to see if an atom is the name of a load module which has been loaded? RESPONSE (Perdue): No, but it is currently the practice to use the expression "(memq options*)" to determine this. Date: 18 Jun 1982 1424-PDT From: Cris Perdue Subject: Char macro The char macro is not well documented and the use of is almost certainly not correct. Date: 18 Jun 1982 1425-PDT From: Cris Perdue Subject: PLAP: logical name Class: Distribution of PSL The name PLAP: is used in the full-restore.ctl file, but is not a standard logical name. It should be PL: instead. RESPONSE (Griss): The file full-restore.ctl is not documented, wasn't intended for distribution. Something will be done to make things consistent. Date: 18 Jun 1982 1429-PDT From: Cris Perdue Subject: Batch control files Class: Distribution of PSL The batch control files use the standard logical names. For this to work properly, users who rebuild PSL should have a BATCH.CMD file that TAKEs the logical-names command file. This approach is cleaner than having mentions of the actual name of the PSL directory, if not others, in each batch control file. Date: 18 Jun 1982 1431-PDT From: Cris Perdue Subject: Building new directories Class: Documentation bug The DEC-20 release notes suggest the use of the standard logical names as arguments to the TOPS-20 BUILD command. Our version of BUILD does not accept a logical name for the building of a NEW directory (it's OK for old ones, although that feature may be a local addition to the code). Date: 6/16/82 From: Alan Snyder Subject: PSL compiler bug; RETURN Class: Bug I have discovered what appears to be a bug in the PSL compiler. When you use (RETURN) with no argument, the compiler generates a "call" to the function NIL, which is undefined. The interpreter has no problem. For example: 16 June 1982 Alan Snyder ---------------------------------------- Compiling TEST Source: (LAMBDA NIL (PROG NIL (RETURN)) 3) ---------------------------------------- Object: (*ENTRY TEST EXPR 0) (*ALLOC 0) (*LINK NIL EXPR 0) (*MOVE '3 (REG 1)) (*EXIT 0) *** Function `TEST' has been redefined *** (TEST): base 326164, length 3 words ---------------------------------------- RESPONSE (csp): Definitely a bug. Not hard to fix, the solution awaits a decision about just what error checking there should be on RETURN. RESPONSE (Benson): The compiler now gives a warning message. From: Lanam Subject: Packages Class: Bugs, Information Doug uncovered the following: The current package is never changed as a module is loaded. This means that if one changes the current package, it should be reset as soon as possible. Some functions are "autoloaded". Be aware of this when changing the current package. Date: 5/27 From: Lanam Class: Bug asin (n) where n > 1 or n < -1 gives the error that REDERR is an undefined function. Date: 5/27 From: Lanam Class: Deficiency I can not find any method of general type checking or type coersion. Date: 5/27 From: Lanam Class: Bug (close) with no arguments says nil is an undefined function. Date: 5/27 From: Lanam Class: Note (car nil) and (cdr nil) is illegal. I would prefer (car nil) => nil and (cdr nil) => nil. Date: 5/27 From: Lanam Subject: Reader Class: Bug Typing an extra ")" to the top level interpreter gives you an error message. It would be nicer if it was just ignored. Date: 5/27 From: Lanam Subject: Getd, Putd Class: Comment It would be nice if (putd new-function-name (getd old-function name)) worked. At present the best I can see is (let ((x (getd ..))) (putd new (car x) (cdr x))) Date: 5/27 From: Lanam Subject: Lexprs Class: Feature request Need a package that allows lexpr and (arg n) inside lexprs. Date: 5/27 From: Lanam Subject: Defun Class: Deficiency Defun in common lisp compatibility only handles exprs, not macros, or fexprs. Date: 5/27 From: Lanam Subject: Function/special definition Class: Bug Cannot have the names of fexprs or macros or nexprs, be the name of a special variable also. Date: 5/27 From: Lanam Subject: Char function Class: Documentation bug There are two char functions described in the manual. The one mentioned as being loaded with the Common-LISP strings package is not loaded in with the strings package. Date: 5/24 From: Goldstein Subject: Argument checking Class: Clarification Is it the case that PSL does not check for functions that receive the wrong number of arguments? Is it able to do so (for interpretive & for compiled code)? It would be nice if it had such an error checking mode. Date: 5/24 From: Goldstein Subject: Section 8.7 Class: Documentation deficiency The arguments to the string functions are not defined. Date: 5/24 From: Goldstein Subject: Globals, fluids; Section 10.4 Class: Bug, Documentation bug The manual claims that global variables cannot be rebound. However, no error occured for: ((lambda (throwtag*) 1) 1) which rebinds this global?? Date: 5/24 From: Goldstein Subject: Closures, Section 10.3.1 Class: Question What is the timetable for implementing closures. Altbind is unavailable at our site. Date: 5/24 From: Goldstein Subject: Global variables; Section 12.2 The description of the globals is frequently missing or too cryptic. Date: 5/24 From: Goldstein Subject: Lisp Rlisp compatibility Class: Deficiency If RLISP is only a parser for Lisp, then there should be functions: On, Off, In, Out. Why don't these functions exist. Ditto for <=, >=, etc. RESPONSE (Griss, as told to Perdue): This situation is basically historical. The problems with On, Off, In, Out, etc. are due to the RLISP preprocessor doing some semantics as well as parsing. It is gradually being cleaned up. Date: 5/23 From: Goldstein Subject: Definition of Equal, sec 4.2 Class: Documentation deficiency Comment about open-compiling that begins "... Otherwise, ..." is confusing. The text says that "This is not true of EQ and Eqn". What is not true. EQ is supposed to be open-compiled as well. Date: 5/23 From: Goldstein Subject: Definition of EqCar, sec 4.2 Class: Deficiency, Inquiry EqCar(U,V) does not complain if (Car U) is illegal, e.g. (EQCAR "ab" V). (1) Does the definition check, or is some random thing happening; and (2) should it report an error if (CAR U) is illegal. RESPONSE (Perdue): 1) The definition checks that U is pairp. 2) It evidently should not report an error if U is not pairp. Date: 5/23 From: Goldstein Subject: Definition of Null, sec 4.2 Class: Manual, Inquiry Is it reasonable to place documentation of Null in 4.2.2, Is Null a predicate for testing Type of an Object? Date: 5/23 From: Goldstein Subject: Definition of Intern and NewId, sec 4.2 Class: Manual deficiency Interning a newId does not lose NewId's property list, if no previous ID with this print name has been interned, e.g. (setq x (newId "ABC")) %No atom with this print name exists. (put x 'prop 'val) (intern x) (get 'ABC 'prop) --> val Manual could be clearer in this regard. Date: 5/23 From: Goldstein Subject: Arithmetic functions Class: Manual, Inconsistency MACRO rather than NEXPR is used for the multi-argument functions like PLUS. What is the rationale for this. Date: 5/23 From: Goldstein Subject: Help function Class: Inconsistency (help top-loop) and (help toploop) are not the same. The former just prints the file. The latter executes a function that prints the file, then prints the current bindings of the reader, printer, etc. This might be confusing to a novice user. Perhaps, the file should be toploop.hlp (without the - sign). Date: 5/22 From: Goldstein Subject: Backtrace Class: Improvement It would be nice if BACKTRACE did not print the functions that it itself put on the stack, since they are artifacts of its use and not relevant to debugging. Date: 5/22 From: Goldstein Subject: EMODE Class: Improvement (1) bind backspace to the rubout handler. (2) Commands like read and write file should use the default file associated with the current buffer. (3) Auto save and Auto fill are two important additions. (4) Write should say that the file was written. Date: 5/22 From: Goldstein Subject: HELP function Class: Improvement It would be nice if the HELP function also informed the user of some dynamic properties, e.g. HELP should let the user know if the module is loaded. Date: 5/22 From: Goldstein Subject: HELP function Class: Documentation deficiency (HELP) states that a certain set of help files are available. In fact, there is a larger set corresponding to thse described in the manual. Date: 5/22 From: Goldstein Subject: EMACS function Class: Bug (EMACS) tries to run EMACS.EXE. The HP HULK has no directory . Date: 5/22 From: Goldstein Subject: MMFORK variable Class: Consistency The manual describes the convention that globals have the suffix !*. But, the MM command uses the variable MMFORK with no suffix. Date: 5/22 From: Goldstein Subject: HELP function Class: Bug In RLISP mode, HELP FOR; losses because the parser attempts to parse FOR unless FOR appears in quotes. Date: 5/22 From: Goldstein Subject: External, Internal, Exported; section 21.2 Class: Documentation bug In the example, EXPORTED ... appears, but it is not documented in the preceding text. Only external, internal are documented. Date: 5/22 From: Goldstein Subject: SYSLISP; p21.3 Class: Documentation deficiency The manual does not explain how to reformulate a LISP function into a SYSLISP function when in LISP mode, i.e. is there a some kind of reformulator that converts calls to plus to calls to wplus2. Date: 5/22 From: Goldstein Subject: *TIME variable Class: Bug Executing (setq !*Time T) causes an error which caused system to begin prompting with line number 1. This only happened the first time, and did not repeat when !*Time was toggled. Repeatable in a fresh PSL. Does not occur in RLISP mode, only in LISP mode. Date: 5/8 From: Goldstein Subject: How to make a dribble file Class: Inquiry It appears that PSL cannot write to two channels at the same time, thus preventing a dribble file. RESPONSE (Griss): Redefine PRINT functions to write to two channels or define your own special channel with a writechannel function that writes to two other channels. Date: 5/8 From: Goldstein Subject: TOPS-20, DOCMDS, CMDS Class: Documentation deficiency, Bug These functions do not seemed to be defined. RESPONSE (Griss): Help file erroneously mentions exec0. Exec, MM and EMACS are autoloading. The rest are obtained by LOAD EXEC;. Date: 5/8 From: Goldstein Subject: Prettyprinting Class: Inquiry Is there a prettyprinter? RESPONSE (Griss): Yes, the function Prettyprint. Date: 5/8 From: Goldstein Subject: PPF Class: Bugs Debug module has the function PPF which apparently pretty prints in RLISP format. PPF tries to print according to the currently loaded parser. Unfortunately, it detects whats loaded by looking for the function RPRINT, which is autoloading. Also, ppf and plist lose when the fn or plist is not defined. RESPONSE (Griss): True. Date: 5/8 From: Goldstein Subject: Interrupt characters Class: Documentation deficiency There don't seem to be any interrupt characters, e.g. control-g to return to toplevel. (An interrupt package is mentioned, but not cited as complete.). RESPONSE (Griss): Interrupts exist (Load Interrupt), but not documented. Date: 5/8 From: Goldstein Subject: LAPOUT, LAPEND Class: Obsolete, Inquiry The functions LAPOUT, and LAPEND do not seem to exist. Possibly a renaming has taken place since the 18 January manual. RESPONSE (Griss): FASLOUT and FASLEND are the correct functions. Date: 5/8 From: Goldstein Subject: Saving a PSL Class: Inquiry, obsolete I tried SAVESYSTEM, followed by the TOPS-20 SAVE command. However, when I tried to run the resulting .exe file, I got the complaint "No starting address". How is a PSL saved and restarted. (Manual, p.14.1) RESPONSE (Griss): The file on the tape is still incorrect. Patch needed to handle tops 20 release. RESOLUTION: Apparently fixed. Date: 5/8 From: Goldstein Subject: HELP Class: Documentation bug, documentation deficiency The manual claims that HELP of no arguments prints a message. It works in Lisp mode as (HELP) and in RLISP mode as HELP; but HELP(); loses?? RESPONSE (Griss): help() still loses. help mini-editor requires ! before -. Date: 5/8 From: Goldstein Subject: Rubout handler Class: Inquiry The Rubout handler is line-oriented, and apparently one cannot rubout accross cr's. Is this true? RESPONSE (Griss): Yes. Date: 5/8 From: Goldstein Subject: PSL memory usage Class: Inquiry What is the size of various PSL spaces. Date: 5/8 From: Goldstein Subject: PSL memory usage Class: Feature request One would like an INQUIR function that prints out PSL memory usage statistics. Date: 5/8 From: Goldstein Subject: HELP facility Class: Documentation bug; Bug Note that some help files are incorrect; eg HELP editor refers to minieditor, not mini-editor