【问题标题】:How do you use mit / gnu scheme in non repl mode?如何在非 repl 模式下使用 mit/gnu 方案?
【发布时间】:2016-10-02 12:06:31
【问题描述】:

我有一个名为 test.scm 的文件,它看起来像:

(display 5)

当我这样去的时候

cat test.scm | scheme

或者像这样

scheme < test.scm

或者像这样

cat test.scm | scheme > output.txt

我明白了

MIT/GNU Scheme running under GNU/Linux
Type `^C' (control-C) followed by `H' to obtain information about interrupts.

Copyright (C) 2011 Massachusetts Institute of Technology
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Image saved on Sunday February 7, 2016 at 10:35:34 AM
  Release 9.1.1     || Microcode 15.3 || Runtime 15.7 || SF 4.41
  LIAR/x86-64 4.118 || Edwin 3.116

1 ]=> 5
;Unspecified return value

1 ]=> 
End of input stream reached.
Moriturus te saluto.

我必须做什么才能获得以下信息?

5

【问题讨论】:

标签: scheme mit-scheme


【解决方案1】:

棘手的问题。我已经尝试了一点,但我在让它表现得像我目前使用的其他 Scheme 实现时遇到了问题。如果你对详细输出没问题,你可以这样做:

scheme --load "file.scm"

现在。我通常使用plt-r5rsplt-r6rs 来运行东西,并使用raco exe 为我的机器创建一个可执行文件:

plt-r5rs r5rs-program.scm # interpreted r5rs
plt-r6rs r6rs-program.scm # interpreted r6rs
raco exe any-scheme-program.scm
./any-scheme-program # faster executable

我有时也使用 ikarus,因为它有时比编译的球拍更快:

ikarus --r6rs-script r6rs-program.scm # jit compiled r6rs

在您的问题中,您正在尝试使用 shell 管道和重定向。这些将 stdio/stdout/stderr 从文件或管道重定向到另一个程序,不计划要运行的源代码。这适用于球拍和 ikarus:

cat file1 file2 | ikarus --r6rs-script r6rs-echo.scm | wc -l 
plt-r6rs r6rs-echo.scm < file | wc -l 
plt-r5rs wcl.scm < file > file-count.txt

请注意,还有许多其他符合 R5RS、R6RS 甚至 R7RS 的 scheme implementations 也可以做到这一点。自从我使用 mit-scheme 已经有一段时间了,在我使用许多其他选项重新开始之前肯定会很长一段时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 2012-02-27
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    相关资源
    最近更新 更多