如何在 mit-scheme 中正确使用(读取)?

How to use (read) correctly in mit-scheme?

我在文档和 rosetta 代码中读到 (read) 用于从控制台获取输入。所以我写了这段代码来检查这个:

(display (+ (read) 1))

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

在 REPL 中,(display (+ (read) 1)) 按预期工作。

(display (+ (read) 1))放在一个源文件中,并且该文件是运行作为使用mit-scheme --quiet < program.scmreference)的脚本时,mit-scheme从不要求用户输入,程序终止。为什么?

要查看原因,请将其放在源文件中:

(define n (read))
2
(display (+ n 1))

你得到 3,正如预期的那样。

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

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