【问题标题】:How to use (read) correctly in mit-scheme?如何在 mit-scheme 中正确使用(读取)?
【发布时间】:2019-09-07 20:52:12
【问题描述】:

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

(display (+ (read) 1))

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

【问题讨论】:

  • 您能展示一下您是如何运行代码的吗?您是否将代码直接输入到 REPL 中?代码在文件中吗?你是如何运行文件的?

标签: scheme mit-scheme


【解决方案1】:

在 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) 不会提示用户输入,因为 stdin 是源文件。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多