我在文档和Rosetta Code中读到,(read)
用于从控制台获取输入。所以我编写了以下代码来检查它:
(display (+ (read) 1))
但是 mit-scheme 从未要求用户输入,程序只是终止了。这是为什么?
我在文档和Rosetta Code中读到,(read)
用于从控制台获取输入。所以我编写了以下代码来检查它:
(display (+ (read) 1))
(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?.