Эквивалент Common Lisp основной функции Haskell?

Функция Haskell main делает именно то, что я хочу: оценивает, когда файл загружается сам по себе (например, ./ myfile.hs или runhaskell myfile.hs ) и ни в каком другом случае. main не будет вызываться, когда файл импортируется другим файлом. newLISP также имеет эту функциональность.

Есть ли эквивалентный код для Common Lisp?

Я прочитал исходный код для CLISP. Вот' s что происходит, когда пользователь вводит clisp myfile.lisp или ./ myfile.lisp :

  1. CLISP сохраняет myfile.lisp как p- > argv_execute_file .
  2. CLISP создает выражение (LOAD «p-> argv_execute_file») и помещает его в стек Лиспа.
  3. CLISP сохраняет любые дополнительные аргументы командной строки в списке .
  4. CLISP хранит аргументы в переменной Lisp * 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))

7
задан mcandre 26 November 2010 в 13:33
поделиться