如何在MIT-Scheme中正确使用(read)函数?

4

我在文档和Rosetta Code中读到,(read)用于从控制台获取输入。所以我编写了以下代码来检查它:

(display (+ (read) 1))

但是 mit-scheme 从未要求用户输入,程序只是终止了。这是为什么?

你能展示一下代码是如何运行的吗?你是直接在 REPL 中输入代码的吗?还是代码在文件中?你是如何运行这个文件的? - Flux
1个回答

3
在REPL中,(display (+ (read) 1))的输出和预期相符。
(display (+ (read) 1))放在源文件中,并使用mit-scheme --quiet < program.scm命令运行该脚本时(参考资料),mit-scheme不会请求用户输入,程序直接终止了。为什么呢?
为了找到原因,可以将下面这段代码替换到源文件中:
(define n (read))
2
(display (+ n 1))

你得到了预期的 3

这全部都是由于 shell 输入重定向(即 <)引起的。 read 默认从当前输入端口获取其输入。使用shell输入重定向时,当前输入端口是源文件。因此,(read) 不提示用户输入,因为 stdin 是源文件。

据我所知,目前没有一种容易的方法可以直接从命令行正确地运行MIT Scheme脚本(惊喜!惊喜!MIT Scheme已经过时)。相关邮件列表讨论:[MIT-Scheme-devel] How to run a script and exit?.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接