你如何在非repl模式下使用mit / gnu方案?

时间:2016-10-02 12:06:32

标签: scheme mit-scheme

我有一个名为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

1 个答案:

答案 0 :(得分: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

请注意,还有很多其他scheme implementations符合R5RS,R6RS甚至R7RS的要求。自从我使用mit-scheme以来已经有一段时间了,在我再次开始使用其他许多选项之前,它肯定会很好。