Haskell的
是否有Common Lisp的等效代码?
我阅读了CLISP的源代码。当用户输入
注意:如果文件从REPL加载,Shebang会给CLISP带来麻烦,因此我将此代码放在
main
函数正好符合我的要求:仅在文件自身加载时进行评估(例如./myfile.hs
或runhaskell myfile.hs
),其他情况下不进行评估。当文件被另一个文件导入时,main
不会被调用。 newLISP也具有此功能。是否有Common Lisp的等效代码?
我阅读了CLISP的源代码。当用户输入
clisp myfile.lisp
或./myfile.lisp
时,以下内容将发生:
- CLISP将
myfile.lisp
保存为p->argv_execute_file
。 - CLISP创建表达式
(LOAD "p->argv_execute_file")
并将其推送到Lisp堆栈上。 - CLISP将任何附加的命令行参数保存在列表中。
- CLISP将参数存储在Lisp变量
*args*
中。
p->argv_execute_file
的Lisp变量,因此无法区分myfile.lisp
是直接加载的,还是由REPL中的用户或另一个Lisp文件加载的。如果只有(car *args*)
是myfile.lisp
,那么我的任务就很容易了。注意:如果文件从REPL加载,Shebang会给CLISP带来麻烦,因此我将此代码放在
~/.clisprc.lisp
中。(set-dispatch-macro-character #\# #\!
(lambda (stream character n)
(declare (ignore character n))
(read-line stream nil nil t)
nil))