如何在 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.scm
(reference)的脚本时,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?.
我在文档和 rosetta 代码中读到 (read)
用于从控制台获取输入。所以我写了这段代码来检查这个:
(display (+ (read) 1))
但是 mit-scheme 从不要求用户输入,程序只是终止。为什么会这样?
在 REPL 中,(display (+ (read) 1))
按预期工作。
当(display (+ (read) 1))
放在一个源文件中,并且该文件是运行作为使用mit-scheme --quiet < program.scm
(reference)的脚本时,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?.