Функция Haskell main
делает именно то, что я хочу: оценивает, когда файл загружается сам по себе (например, ./ myfile.hs
или runhaskell myfile.hs
) и ни в каком другом случае. main
не будет вызываться, когда файл импортируется другим файлом. newLISP также имеет эту функциональность.
Есть ли эквивалентный код для Common Lisp?
Я прочитал исходный код для CLISP. Вот' s что происходит, когда пользователь вводит clisp myfile.lisp
или ./ myfile.lisp
:
myfile.lisp
как p- > argv_execute_file
. (LOAD «p-> argv_execute_file»)
и помещает его в стек Лиспа. * args *
. CLISP никогда не создает переменную Lisp, ссылающуюся на p-> argv_execute_file
, поэтому нет возможности определить, был ли myfile.lisp
загружен напрямую, пользователем в REPL или другим файлом Lisp. Если бы только (car * args *)
был myfile.lisp
, моя задача была бы легкой.
Примечание: Shebang вызывает проблемы с CLISP, если файл загружается из REPL, поэтому я поместил этот код в ~ / .clisprc.lisp
:
(set-dispatch-macro-character #\# #\!
(lambda (stream character n)
(declare (ignore character n))
(read-line stream nil nil t)
nil))