2010-12-13 27 views
15

私は、インタプリタが評価されたときにそれを終了させる式を探しています。Common Lispでインタプリタを停止するコマンドはありますか?

私は多くの実装固有のものを見つけましたが、HyperSpecには何も見つかりませんでした。仕様に定義されていないものがあるかどうか疑問に思っていました。私は(quit)がCLISPとSLIMEの両方で認識され、(exit)はCLISPによってのみ認識されることがわかりましたが、これらのいずれかを参照するドキュメントは見つかりません。

+1

インタープリタがあり、Lispコードが解釈されて実行される場合は、実装固有のものです。ほとんどのCommon Lispの実装はコンパイラを提供します。 SBCLのような実装では、コンパイラとインタプリタのみがあります。 CCLはデフォルトですべてをコンパイルします。それは、ディーゼルエンジンを搭載していない車が多い場合、ディーゼルエンジンの停止方法を尋ねるようなものです。 –

答えて

17

私が知る限り、これはSpecによってカバーされていないため、実装固有のソリューションを使用するか、誰かが簡単に終了したlibをすでに書いているかどうか試してみる必要がありますCLiki)。

あなたがインタラクティブな使用のみを気にしているのであれば、スリムの,qは常に正しいことをします。以下のシンボルが*features*である場合、

(defun my-quit() 
    #+sbcl (sb-ext:quit) 
    #+clisp (ext:exit) 
    #+ccl (ccl:quit) 
    #+allegro (excl:exit)) ;; and so on ... 

#+チェック:そうでなければ、あなたはこのように、読み取り時間を条件文を使用することができます。そうでない場合、次の形式は空白として扱われます。 (反対には#-もあります)。

+3

ここでは、SLIMEがどのような場合に使用するのかを示すGoogleコード検索があります:http://google.com/codesearch?q=%22defimplementation+quit-lisp%22 – Ken

+0

"私はこれらの機能が見つからない場合、'(exit) 'を実行してみてください。 –

+0

ハルデアン:あなたが何を意味するか分かりません。あなたは何かを実行しようとすることができます。 :-)それは標準化されておらず、一貫しているようには見えないので、どのように選ぶべきかを決めることはできません。不明なコンパイラを使用している場合、ほとんどのtrivial- *ライブラリIIRCはエラーを通知します。 – Ken

5

CL環境を終了する標準的な方法はありません。使用している実装でそれを行う方法を知るには、そのドキュメントを読んでください。

sbclでは、(sb-ext:quit)がこのトリックを行います。 clispの場合は、(ext:exit)です。コマンドのclispのドキュメントは、http://clisp.sourceforge.net/impnotes.html#quit

13

にあります。ほとんどのLispsはCL-USERにquit関数をインポートするので、CL-USER :: QUITは、実装固有のパッケージがどこにあるのかわからなくても良い推測です。

(cl-user::quit) 

QUITをCL-USERパッケージからエクスポートする必要はないので、2つのコロンを注意してください。

関連する問題