Haskell のmain
関数は、まさに私が望んでいることを実行します。ファイルが単独でロードされた場合 (./myfile.hs
または などrunhaskell myfile.hs
) を評価し、それ以外の場合は評価しません。main
ファイルが別のファイルによってインポートされたときは呼び出されません。newLISPにもこの機能があります。
Common Lisp に相当するコードはありますか?
CLISPのソースコードを読みました。ユーザーがclisp myfile.lisp
orを入力すると、次のようになります./myfile.lisp
。
- CLISP は として保存
myfile.lisp
しp->argv_execute_file
ます。 - CLISP は式
(LOAD "p->argv_execute_file")
を作成し、それを Lisp スタックにプッシュします。 - CLISP は、追加のコマンドライン引数をリストに保存します。
- CLISP は引数を Lisp 変数に格納します
*args*
。
CLISP は を参照する Lisp 変数を作成しp->argv_execute_file
ないため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))