これに対する答えを見つけるのが難しいので、それができないかもしれません。コマンドラインから、つまりemacs内からではなく、LISPファイルをロード/コンパイルし、そのファイル内のLISP関数の1つをコマンドラインからも実行できるという柔軟性が欲しいです。これは間違いなく実装固有の機能であるため、これを提供する実装へのポインタ(またはおそらくそれはかなり標準的なものかどうかはわかりません)。私はSBCLを使用していて、それが好きなので、これができれば素晴らしいと思います。
また、Mac OSXとターミナルを使用しています。
SBCLマニュアルでは、3つの便利なオプションについて説明しています
.3.1ランタイムオプション
_
--noinform
_
起動時にバナーやその他の情報メッセージの印刷を抑制します。これにより、Unixパイプラインで問題なく動作するLISPプログラムを簡単に作成できます。 _--noprint
_および_--disable-debugger
_オプションも参照してください。
.3.2トップレベルオプション
_
--eval command
_
初期化ファイルを実行した後、ただし標準入力でread-eval-printループを開始する前に、指定されたコマンドを読み取って評価します。複数の_--eval
_オプションを使用でき、コマンドラインに表示される順序ですべてが読み取られて実行されます。_
--load filename
_
これは--eval '(load "filename")'
と同等です。特別な構文は、シェルスクリプトからSBCLを呼び出すときの頭痛の種を減らすことを目的としています。
内容を含むファイル_test.LISP
_を指定
_(defun hello-world ()
(print 'hello-world)
(terpri))
_
これはSBCLで実行できます。
_$ sbcl --noinform --load test.LISP --eval '(progn (hello-world) (sb-ext:quit))'
HELLO-WORLD
_
_(progn ... (sb-ext:quit))
_は、_(hello-world)
_の実行後にプログラムが確実に終了するようにします。そうしないと、SBCLプロンプトが表示されます。コードはSBCLで自動的にコンパイルされるため、実行している関数は_(hello-world)
_が実行される時点ですでにコンパイルされています。事前にファイルをコンパイルしている場合は、コンパイルしたファイルを_--load
_に渡すことができます。例えば。、
_$ sbcl --noinform --load test.fasl --eval '(hello-world)'
HELLO-WORLD
_
実際、_--load
_と--eval (load "filename")
が等しい場合、ファイル名のベースを使用できます。コンパイル済みのバージョンがある場合は、SBCLがそれをロードし、ない場合は、次に、SBCLがソースファイルを読み込み、コンパイルされたコードをそのように取得します。たとえば、以下では_--load test
_のみを使用します。
_$ sbcl --noinform --load test --eval '(hello-world)'
HELLO-WORLD
_
以下は 最初のgoogleの結果 からの貼り付けです:
クリップ
CLISP Common LISP環境を使用している場合、以下が適用されます。
Test.LISPプログラムという名前のプログラムをtest.fasという名前のバイトコードファイルにコンパイルするには、次のようにします。
clisp -c test.LISP
表示する出力を減らしたい場合は、代わりに以下を実行してください。
clisp -q -c test.LISP
コンパイル済み(または上記の手順をスキップした場合はコンパイルされていない)LISPファイルを実行するには、エントリ関数の名前がmainであると想定して、次の手順を実行します。通常、メイン関数の結果は完了時に表示されますが、(quit)コマンドはそれを防ぎます。 -on-error abortオプションは、clispがデバッグプロンプトにドロップするのを防ぎ、エラーが発生したときに終了します。
clisp -q -q -on-error abort -x '(progn(load "test")(main)(quit))'
Arch Linuxターミナルでテストしたところ、次のことができます。
$ clisp myprogram.LISP
これはプログラムをターミナルで実行します。後で実行するためにコンパイルする場合は、上記のビットを参照してください。
他の人々が示したように、ほとんどすべての実装には、ターミナルを介してLISPコードを実行するものがあります。多くの実装に共通のインターフェースを提供するラッパーもいくつかあります: [〜#〜] cim [〜#〜] および cl-launch 。
sbcl
Common-LISPをknitrを介してRに統合しようとしています。評価のリクエストをsbcl
に送信してRに返す方法に関するいくつかのテストを以下に示します。これは、ファイルではなくフォームの送信で機能します。ターミナルから:
sbcl --noinform --eval '(progn (print (* 2 3 4 5)) (sb-ext:quit))'
;; 120
sbcl --noinform --eval '(progn (print (* 2 3 4 5)) (sb-ext:quit))'
;;こんにちは世界
sbcl --noinform --eval "(progn (dotimes (i 5) (print i)) (sb-ext:quit))"
;; 0
;; 1
;; 2
;; 3
;; 4