ハスケルのmain
関数は、私が望むだけで、ファイルがロードされたときに評価します(例えば、./myfile.hs
またはrunhaskell myfile.hs
)。それ以外の場合は評価しません。 main
は、別のファイルによってファイルがインポートされたときには呼び出されません。 newLISPにもこの機能があります。Haskellのmain関数に相当するCommon Lisp?
Common Lispに相当するコードはありますか?
私はCLISPのsource codeを読んでいます。
- CLISPは
p->argv_execute_file
としてmyfile.lisp
を保存します。ここでは、ユーザがclisp myfile.lisp
や./myfile.lisp
入ったときに何が起こるかです。 - CLISPは式
(LOAD "p->argv_execute_file")
を作成し、それをLispスタックにプッシュします。 - CLISPは、追加のコマンドライン引数をリストに保存します。
- CLISPは、引数をLisp変数
*args*
に格納します。
CLISPはp->argv_execute_file
を参照Lispの変数を作ることはありませんので、myfile.lisp
をREPLで、ユーザによって、または別のLispファイルによって、直接ロードされたかどうかを見分ける方法はありません。 (car *args*)
がmyfile.lisp
の場合、私の仕事は簡単です。
注:ファイルがREPLからロードされている場合ShebangsはCLISPのトラブルを与えるので、私は~/.clisprc.lisp
にこのコードを配置:
(set-dispatch-macro-character #\# #\!
(lambda (stream character n)
(declare (ignore character n))
(read-line stream nil nil t)
nil))
なぜメイン関数と同等のものが必要ですか? –