从Mac终端编译/运行Common LIsp

hed*_*der 12 lisp macos terminal common-lisp

有没有办法做到这一点?我一直在使用Slime来学习Lisp,我想开始构建更大的项目,这意味着(我认为)我必须开始编写一些.lisp文件.

rma*_*ouf 10

我认为你对Mac Common LISP最好的赌注是LispWorks个人版SBCL.

假设你已经安装了SBCL,你可以使用文本编辑器创建一个.lisp文件(emacs将是传统的选择):

(defun test ()
"Hi!")
Run Code Online (Sandbox Code Playgroud)

然后你可以在shell中运行一个lisp解释器:

bash% sbcl
This is SBCL 1.0.29, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
* (load "test.lisp")

T
* (test)

"Hi!"
* 
Run Code Online (Sandbox Code Playgroud)

shell可以是mac终端窗口,也可以是在emacs中运行的低级lisp解释器.

  • 嘿rmalouf!SBCL的选项--script <filename>可用于直接执行没有REPL的文件. (4认同)

Sva*_*nte 6

Slime旨在支持编写Lisp文件,包括定义查找,在线文档,名称完成,编译等.也许您应该看一下手册,第3章(使用粘液模式).


dan*_*lei 5

我认为要说出你真正要求的东西有点难.

可以使用C-c C-k缓冲区在Slime中编译和加载整个Lisp文件,然后在Slime REPL中使用它,这样您甚至不必LOAD在REPL中运行.

然后,如果你想从命令行运行你的Lisp程序作为脚本,那么可以在OS X shell中使用unices的shebang行解决方案,但这些解决方案从实现到实现都有所不同.

构建可执行文件(可以从命令行运行)的可能性是将相关代码加载到Lisp图像中,然后使用加载的代码保存该图像.这些图像可以是可执行的,在启动时执行给定的功能(想想main).这种可能性对于实现也有所不同,因此,如果不提及您的选择实现,您将不得不在其文档中查找它.

现在,既然你问的是"专门建立更大的项目",我的建议就是熟悉一个系统定义设施.lisp系统基本上是一种"项目",一些包含代码,包定义和系统定义的文件.我将给你一个ASDF的例子,这是(据我所知)开源世界中最受欢迎的一个.

(defsystem my-system
  :name "my-system"
  :version "0.0.1"
  :author "hedgehogrider"
  :license "BSD"
  :description "bla bla bla"
  :serial t
  :components ((:file "packages")
               (:file "code")))
Run Code Online (Sandbox Code Playgroud)

现在,您可以将它放在一个asd文件中,比如说my-system.asd,将您的包定义放入packages.lisp,您的功能code.lisp,然后,如果您正确设置了ASDF,您将能够通过按下来编译和加载您的系统在Slime REPL中,l my-system.或者,您可以在REPL中输入(asdf:oos 'load-op 'my-system)(或者,对于更新版本的ASDF (asdf:load-system 'my-system):).

为了使这项工作,您必须为您的Lisp实现安装ASDF,如果它没有附带,并且asdf必须放入包含您的-files 的目录asdf:*central-registry*.一个简单的解决方案是将您的asdf文件符号链接到一个中央目录,但还有其他可能性.查看ASDF文档其他教程以了解有关ASDF的更多信息.