web-dev-qa-db-ja.com

MIT-Schemeで.scmスクリプト(REPLの外部)を実行するにはどうすればよいですか?

'scheme file.scm'のようなものを入力してファイルを解釈させてから、REPLにロードするのではなく、シェルに戻したいと思います。

編集:scheme <test.scmを試しましたが、それでもREPLを使用していますが、唯一の違いは、ストリームが終了するとスキームが終了することです。

40
Rusty

scheme < file.scmは機能するはずです(--interactiveを指定せず、stdinが端末でない限り、スキームは非対話的に機能します)。

35
Alex Martelli

MIT Schemeを使用してschemeプログラムを実行するには:

scheme --quiet < program.scm

--quietオプションは、プログラムからの出力が表示される唯一のものであることを保証します(つまり、要件に従ってREPLは表示されません)。

警告:プログラムが入力手順(例:readread-charread-lineなど)を使用してユーザーに入力を求める場合、これは機能しません。 。)。これは、シェル入力リダイレクト(<)が原因です(参照: 関連する質問 )。残念ながら、現在、入力プロシージャが使用されている場合、コマンドラインからMIT Schemeスクリプトを実行する適切な方法はありません。最良のオプションはおそらくmit-scheme --quiet --load 'myscript'ですが、スクリプトが終了したら手動でMITSchemeを終了する必要があります。関連するメーリングリストスレッド: [MIT-Scheme-devel]スクリプトを実行して終了する方法は?

編集:<>と間違えて入力すると、ソースコードが上書きされる可能性があるため、上記のコマンドをシェルスクリプトまたはシェル関数にカプセル化することをお勧めします。例えば:

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

その後、ソースコードが上書きされることを恐れずにrunscheme program.scmを実行できます。 ( Paul Rooney この潜在的な間違いを私の注意を引いてくれたことに特に感謝します)。

参考文献

scheme --help

--batch-mode、-quiet、-silent

バージョンと著作権の起動レポート、および評価を抑制します。

このコマンドラインオプションは ドキュメントのコマンドラインオプションのリスト から誤って省略されているようですが、scheme --helpがそれを示しており、--batch-modeが他で使用されているため、これは正当なコマンドラインオプションだと思いますリファレンスマニュアルの一部(例: ここ )。

13
Flux

あなたが欲しいのはSCMだと思います。次のような.scmスクリプトを実行できます。

$ scm -f foo.scm arg1 arg2 arg3

詳細については、 http://people.csail.mit.edu/jaffer/scm_3.html#SEC28 を参照してください。

SCMホームページ: http://people.csail.mit.edu/jaffer/SCM

5
Forrest

チェック済みchez --help、そして私はこれを見つけました(私がchezスキームを使用しているとしましょう):

chez --script ./temp.scm

また、--verboseは非常に便利です:

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