我在文档和 Rosetta 代码中读到(read)
用于从控制台获取输入。所以我写了这段代码来检查这一点:
(display (+ (read) 1))
但 mit-scheme 从不要求用户输入,程序就会终止。为什么会这样呢?
在 REPL 中,(display (+ (read) 1))
按预期工作。
When (display (+ (read) 1))
放置在源文件中,并且该文件作为脚本运行mit-scheme --quiet < program.scm
(参考 https://stackoverflow.com/q/903968/5916915),mit-scheme 从不要求用户输入,程序就会终止。为什么?
要查看原因,请将其放入源文件中:
(define n (read))
2
(display (+ n 1))
You get 3
,正如预期的那样。
这都是由 shell 输入重定向引起的(即<
). read
默认从当前输入端口获取输入。通过 shell 输入重定向,当前输入端口是源文件。因此,(read)
不提示用户输入,因为 stdin 是源文件。
据我所知,目前没有简单的方法可以直接从命令行正确运行 MITScheme 脚本(惊讶!惊讶!MITScheme 已经过时了)。相关邮件列表讨论:[MIT-Scheme-devel] 如何运行脚本并退出? https://lists.gnu.org/archive/html/mit-scheme-devel/2019-09/msg00000.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)