[gambit-list] Read from stdin

Marc Feeley feeley at iro.umontreal.ca
Thu Apr 16 09:07:23 EDT 2009


On 16-Apr-09, at 5:54 AM, Eduardo Cavazos wrote:

>
> Eduardo Cavazos <wayo.cavazos at gmail.com> writes:
>
>>> Other Schemes (like Chicken, Ypsilon, Larceny, and Ikarus) will read
>>> from stdin by default. For example:
>>>
>>>     echo '(+ 1 1)' | csi
>>>
>>> However, this doesn't work with 'gsi'. Is there a way to
>>> get this to work?
>
> Alex Shinn wrote:
>
>> $ echo '(println (+ 1 1))' | gsi /dev/stdin
>
> Thanks Alex.
>
> Is there a way to get gsi/gsc to start a REPL which reads from stdin?
> This is not quite the same:
>
>     gsi /dev/stdin -
>
> That will read from stdin till EOF and then start a REPL.
>
> I'm guessing that the fact that the gsi/gsc REPL doesn't read from  
> stdin
> by default has to do with the elaborate console it comes with. Seems
> like there should be a way to turn that off with an option; i.e. get a
> plain old stdin repl.


You are correct.  By default REPLs are started on the "console" (the  
controlling terminal, or /dev/tty, in UNIX).  This is a "good thing"  
so that programs which read/write on stdin/stdout can be debugged  
(single-stepping, etc).

The runtime option -:d- will do what you want, i.e. start REPLs on  
stdin/stdout (and it also means that inside the REPLs current-in/ 
output-port will refer to stdin/stdout instead of the console).  Of  
course if you do this the REPL interaction and the program's I/O on  
the current-in/output-port will be mixed.

Here are a few examples which I hope will be enlightening:


% gsi
Gambit v4.4.2

 > (pp (current-input-port))
#<input-output-port #2 (console)>
 > ,q


% echo '(pp (current-input-port))' | gsi -:d-
Gambit v4.4.2

 > #<input-port #2 (stdin)>
 >
*** EOF again to exit


% echo '(pp (current-input-port))' | gsi -e '(eval (read))'
#<input-port #2 (stdin)>


% echo '(sin 1)' | gsi -:ds -e '(eval (read))'
*** STOPPED IN (string)@1.2
 > ,s
| > eval
| #<procedure #2 eval>
*** STOPPED IN (string)@1.8
 > ,s
| > read
| #<procedure #3 read>
*** STOPPED IN (string)@1.7
 > ,s
| > (read)
| (sin 1)
*** STOPPED IN (string)@1.1
 > ,s
| > (eval (read))
*** STOPPED
 > ,s
| | > sin
| | #<procedure #4 sin>
*** STOPPED
 > ,s
| | > 1
| | 1
*** STOPPED
 > ,s
| | > (sin 1)
| | .8414709848078965
| .8414709848078965


Marc




More information about the Gambit-list mailing list