Scripting 公共Lisp等价于Haskell';它的主要功能是什么?
Haskell的Scripting 公共Lisp等价于Haskell';它的主要功能是什么?,scripting,haskell,common-lisp,main,Scripting,Haskell,Common Lisp,Main,Haskell的main函数正是我想要的:在文件自身加载时进行评估(例如/myfile.hs或runhaskell myfile.hs),而不是在其他情况下main。也有这个功能 公共Lisp是否有等效的代码 我为CLISP读了这本书。下面是当用户输入clisp myfile.lisp或/myfile.lisp时发生的情况: (set-dispatch-macro-character #\# #\! (lambda (stream character n) (declare (ignore
main
函数正是我想要的:在文件自身加载时进行评估(例如/myfile.hs
或runhaskell myfile.hs
),而不是在其他情况下<当文件由另一个文件导入时,不会调用code>main。也有这个功能
公共Lisp是否有等效的代码
我为CLISP读了这本书。下面是当用户输入clisp myfile.lisp
或/myfile.lisp
时发生的情况:
(set-dispatch-macro-character #\# #\!
(lambda (stream character n)
(declare (ignore character n))
(read-line stream nil nil t)
nil))
myfile.lisp
另存为p->argv\u execute\u文件
(加载“p->argv\u execute\u file”)
,并将其推送到Lisp堆栈上*args*
中p->argv\u execute\u 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))
(在(情况*)时评估…)
更新很抱歉给您带来了困惑的答案
我可能错了,但似乎不可能完全按照你的意愿去做。我将制作一个shell脚本并调用clisp-imyfile.lisp-x(main)
是否有任何理由不使其可执行(描述)
p.S.Common Lisp是一种语言,clisp
是实现之一。我发现了一个。这有点像骗局,但确实有效。我将很快修改它,以用于CLISP以外的CL实现
#!/bin/sh
#|
exec clisp -q -q $0 $0 ${1+"$@"}
exit
|#
;;; Usage: ./scriptedmain.lisp
(defun main (args)
(format t "Hello World!~%")
(quit))
;;; With help from Francois-Rene Rideau
;;; http://tinyurl.com/cli-args
(let ((args
#+clisp ext:*args*
#+sbcl sb-ext:*posix-argv*
#+clozure (ccl::command-line-arguments)
#+gcl si:*command-args*
#+ecl (loop for i from 0 below (si:argc) collect (si:argv i))
#+cmu extensions:*command-line-strings*
#+allegro (sys:command-line-arguments)
#+lispworks sys:*line-arguments-list*
))
(if (member (pathname-name *load-truename*)
args
:test #'(lambda (x y) (search x y :test #'equalp)))
(main args)))
:load toplevel仅在代码编译时起作用,并且:execute在加载文件时调用main,这不是所需的功能。@mcandre
:load toplevel
在加载文件时起作用,但其他一切都是正确的,我将更新答案,谢谢。clisp-I myscript.cl不能像shebang那样工作。此外,clisp在加载脚本时不允许使用-x参数。但无论如何还是要感谢:)为什么需要与主函数等效的函数?