2016-10-02 54 views
0

我有一個名爲test.scm文件看起來像:如何在非複製模式下使用mit/gnu方案?

(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 
+0

可能的重複[如何使用MIT-Scheme執行.scm腳本(在REPL之外)?](https://stackoverflow.com/questions/903968/how-do-i-execute-a- SCM-腳本外的最REPL-與麻省理工學院的方案) – Flux

回答

1

棘手的問題。我已經嘗試了一點,但我有問題讓它行爲像我目前使用的其他計劃實施。如果你對這個詳細的輸出結果你可以做:

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開始已經有一段時間了,在我用其他很多選項重新開始之前,這肯定會是一段好時機。