从Mac终端编译/运行通用Lisp

14

有没有一种方法可以做到这一点?我一直在使用Slime学习Lisp,我想开始构建更大的项目,这意味着(我认为)我需要开始编写一些 .lisp 文件。


1
你有什么印象让你觉得无法使用SLIME编写Lisp文件和Lisp应用程序? - Rainer Joswig
Rainer是正确的。只需在Slime Lisp缓冲区中按C-c C-k即可编译和加载文件,请查看我的答案以获取更多详细信息。 - danlei
4个回答

13
我认为在Mac上使用Common LISP,最好的选择是LispWorks个人版SBCL
假设你已经安装了SBCL,你可以使用文本编辑器(emacs是传统选择)创建一个.lisp文件:
(defun test ()
"Hi!")

然后你可以在终端中运行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!"
* 

Shell可以是Mac终端窗口或在Emacs中运行的Lisp解释器


4
嗨,rmalouf!SBCL 的选项 --script <filename> 可用于直接执行文件而无需使用 REPL。 - Nico

7

Slime旨在支持编写Lisp文件,包括定义查找、在线文档、名称完成、编译等功能。也许您应该查看手册第3章(使用slime-mode)。


6

我觉得有点难以确定你真正想要问什么。

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

然后,如果您想要从命令行运行Lisp程序作为脚本,那么对于来自unices的shebang行有一些解决方案可在OS X Shell中使用,但这些解决方案因实现而异。

一种可能性是将相关代码加载到您的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")))

现在,您需要将此放入一个名为my-system.asdasd文件中,在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文件的目录必须放在asdf:*central-registry*中。一个简单的解决方案是将您的asdf文件符号链接到一个中心目录,但也有其他可能性。请查看ASDF文档其他教程以了解更多关于ASDF的信息。

3

是的,你需要编写自己的Lisp文件而不是依赖于镜像。

我推荐在OSX上使用CLISP以获得开箱即用的体验。它有一个很好的REPL体验。

今天使用F/OSS进行专业开发通常使用SBCL或CCL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接