【问题标题】:How do I execute a .scm script (outside of the REPL) with MIT-Scheme?如何使用 MIT-Scheme 执行 .scm 脚本(在 REPL 之外)?
【发布时间】:2010-10-28 14:04:05
【问题描述】:

我想输入类似“scheme file.scm”之类的内容并让它解释文件,然后带我回到我的 shell,而不是在 REPL 中加载它。

edit:我尝试了 scheme

【问题讨论】:

    标签: scheme mit-scheme


    【解决方案1】:

    scheme < file.scm 应该可以工作(只要您不指定 --interactive 并且 stdin 不是终端,方案就可以非交互方式工作)。

    【讨论】:

    • 这不符合 OP 的“不使用 REPL”的编辑要求。见this answer
    【解决方案2】:

    我认为你想要的是 SCM。您可以像这样执行 .scm 脚本:

    $ scm -f foo.scm arg1 arg2 arg3

    更多详情请见http://people.csail.mit.edu/jaffer/scm_3.html#SEC28

    单片机首页:http://people.csail.mit.edu/jaffer/SCM

    【讨论】:

    • 奇怪的事情,但没有 -f 对我来说不起作用。请注意这一点,伙计们。
    • 问题是关于 MIT Scheme,而不是关于 SCM。
    【解决方案3】:

    使用 MIT Scheme 运行方案程序:

    scheme --quiet < program.scm
    

    --quiet 选项可确保您的程序的输出是唯一显示的内容(即,根据您的要求,您不会看到 REPL)。

    警告:如果您的程序提示用户使用输入程序进行输入(例如readread-charread-line 等),这将不起作用。这是因为 shell 输入重定向 (&lt;)(参见:relevant question)。不幸的是,当使用输入过程时,目前没有从命令行执行 MIT Scheme 脚本的正确方法。最好的选择可能是mit-scheme --quiet --load 'myscript',但是当脚本完成时你必须手动退出 MIT Scheme。相关邮件列表线程:[MIT-Scheme-devel] How to run a script and exit?

    编辑:由于您可能将&lt; 错误输入为&gt;,从而导致源代码被覆盖,我建议将上述命令封装在shell 脚本或shell 函数中。例如:

    runscheme () {
        scheme --quiet < "$1"
    }
    

    然后您可以运行runscheme program.scm,而不必担心您的源代码会被覆盖。 (特别感谢 Paul Rooney 提醒我注意这个潜在的错误)。

    参考文献

    scheme --help:

    --批处理模式、--quiet、--silent

    抑制版本和版权的启动报告,以及 告别。

    这个命令行选项似乎被list of command line options in the documentation 错误地省略了,但我认为这是一个合法的命令行选项,因为scheme --help 显示了它,并且因为--batch-mode 用于参考手册的其他部分(例如here)。

    【讨论】:

    • 不要把&lt;弄错了,否则你会覆盖你自己的源代码,还是只有我做这样的事情?
    • @PaulRooney 如果您倾向于犯此类错误,我建议您编写一个 shell 脚本或 shell 函数来运行您的 Scheme 程序。示例 shell 函数:runscheme () { scheme --quiet &lt; "$1" }.
    • 好的,谢谢。我不会经常犯这样的错误。抱歉,这不是对答案的批评。我只是这样做了,当我意识到发生了什么时,它让我发笑。
    • @PaulRooney 编辑了答案,以便其他人以后可以避免此类错误。感谢您提请我注意。
    • 对不起,我真的不打算让你改变答案。我只是觉得这很有趣。我会投票,但我已经这样做了。
    【解决方案4】:

    检查了chez --help,然后我发现了这个(假设我使用的是chez方案):

    chez --script ./temp.scm
    

    另外,--verbose 非常有用:

    chez --verbose --script ./temp.scm
    

    【讨论】:

    • 问题是关于 MIT 计划,而不是 Chez 计划。
    猜你喜欢
    • 1970-01-01
    • 2012-02-27
    • 2014-09-03
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多