[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Issue PEEK-CHAR-READ-CHAR-ECHO
- To: IIM@ECLA.USC.EDU
- Subject: Issue PEEK-CHAR-READ-CHAR-ECHO
- From: Kent M Pitman <KMP@STONY-BROOK.SCRC.Symbolics.COM>
- Date: Fri, 10 Mar 89 18:08 EST
- Cc: cl-cleanup@SAIL.STANFORD.EDU
- In-reply-to: <12476991441.30.IIM@ECLA.USC.EDU>
Date: Fri 10 Mar 89 14:41:00-PST
From: Kim A. Barrett <IIM@ECLA.USC.EDU>
Further discussion of this issue here at IIM has lead us to conclude that the
decision made at the Hawaii meeting to accept the proposal
PEEK-CHAR-READ-CHAR-ECHO:FIRST-READ-CHAR was a mistake.
...
Under the proposal as adopted, if the read-eval-print loop were operating on an
echo stream (which *standard-output* is bound to), then the resulting output
would be ...
* 'foo(
FOO
* + 5 5)
10
*
Note how the open-paren is misplaced. ...
I'm not positive I parsed your example correctly, but let me make a few remarks
that I hope will clarify...
This issue was originally drafted to address interactive streams but was
later revised to address only the result of MAKE-ECHO-STREAM, not an
arbitrary stream with echoing semantics exactly to preclude worry of the
sort you describe -- such as might be the initial value of *STANDARD-OUTPUT*
(or, actually, *STANDARD-INPUT*, I think you mean).
You don't say in your mail whether you champion an alternative or leaving
it vague. If you want to leave it vague, the chief problem is that the -exact-
problem that you seem to be describing comes up in echo from files. The only
way around it is to document which of several techniques you can use to reliably
parse such files to get the echo behavior you want.
In particular, in Macsyma, you can write script files that say:
F(X):=X+1$ /* Definition of F */
G(X):=X+2$ /* Definition of G */
The Macsyma interactive loop prompts with (C1), (C2), etc. before each
input command, and the Macsyma batch file facility wants to be able
to type (Cn) and then echo all the chars of the input expression plus any
up to (but excluding) the start of the next real expression. It wants the
echo to look like:
(C1) F(X):=X+1$ /* Definition of F */
(C2) G(X):=X+2$ /* Definition of G */
but if you don't have this stuff pinned down (so it can peek without echoing)
you end up with:
(C1) F(X):=X+1$ /* Definition of F */
G
(C2) (X):=X+2$ /* Definition of G */
This issue had to be dealt with for such non-interactive cases, and
the adopted technique solves the problem. The adopted technique is not intended
to be read as infringing on the possible implementations for interactive
use for the reasons which I think you're citing -- which others cited as well.
Does this make you feel any better?