7

如果您不关心并且只想看到问题,这里是背景故事跳到底部。

所以我在 LISP 中玩了一段时间。一些基本函数,一些类,和文件IO。当我看到这篇文章时:

http://www.adampetersen.se/articles/lispweb.htm

我很高兴尝试将 lisp 用于 Web 应用程序。我去下载这些包,但我一生不知道如何将它们加载到我的 Allegro IDE 中。

嗯...好吧,hunchentoot 网站说很多基本包都在 LispWorks 中。所以我下载那个。仍然不确定如何获取我下载到这些 IDE 中的软件包的源代码。他们似乎有软件包的二进制文件?

哦,好吧,也许我会切换到我的 ubuntu 服务器并 apt-get 所有的包并设置 slime(我以前没有使用过它,因为我只是想学习 lisp。同时学习 emacs 和 lisp 似乎真的令人生畏)。我很容易得到所有需要的包并加载粘液,同样的问题没有可用。

我又挖了一些,看到了这个名为 ASDF 的程序。看起来 ASDF 是 lisp 的某种包构建器?我不知道这似乎令人困惑。这个时候我就要放弃了。


如果您仍在阅读这里是我的问题。
1. 如何将这些包的源代码加载到我的 lisp 环境中。尝试学习 lisp 并不太难,但有关环境的信息却很少。我是否需要构建使用 ASDF 下载的软件包。
2. 有没有一种简单的方法可以让某人在 lisp 中启动和运行,而无需提前大量时间学习所有工具?

4

4 回答 4

8

嗯...好吧,hunchentoot 网站说很多基本包都在 LispWorks 中。所以我下载那个。

这只是意味着作者在 Hunchentoot 中编写了很多 Lispworks 特定的代码。这并不意味着 Hunchentoot 只适用于 Lispworks。

仍然不确定如何获取我下载到这些 IDE 中的软件包的源代码。

您需要使用 ASDF。

他们似乎有软件包的二进制文件?

这不太可能。

哦,好吧,也许我切换到我的 ubuntu 服务器并 apt-get 所有的软件包并设置 slime >(我以前没有使用过它,因为我只是想学习 lisp。同时学习 emacs 和 lisp 似乎真的令人生畏)。

那就不要这样做。你不需要使用 Emacs 或 Slime。

我很容易得到所有需要的包并加载粘液,同样的问题没有可用。

要快速获得结果,请尝试 clbuild:http ://common-lisp.net/project/clbuild/

我又挖了一些,看到了这个名为 ASDF 的程序。看起来 ASDF 是 lisp 的某种包构建器?我不知道这似乎令人困惑。

ASDF 有点像 Common Lisp 应用程序的 Makefile。

这个时候我就要放弃了。

这是你能做的最糟糕的事情(在这个或任何其他点)。我很高兴您决定在这里发布您的问题。

  1. 如何将这些包的源代码加载到我的 lisp 环境中。尝试学习 lisp 并不太难,但有关环境的信息却很少。我是否需要构建使用 ASDF 下载的软件包。

clbuild 应该给你所有你需要的,但如果你不想使用它,这里有一些提示:

  1. CLISP、SBCL:ASDF 是 Lisp 的一部分。运行(require :asdf)。Lispworks、Allegro:您需要下载并加载 ASDF。将 asdf.lisp 保存在某处,然后运行(load "/path/to/asdf.lisp")​​.
  2. 对于每个库/应用程序(ASDF 中的“系统”),您需要将其下载并解压缩到某个地方。重复直到满足所有依赖项。记下这些地方(目录)。
  3. 对于第 2 步中的每个地方,将其添加到 ASDF 注册表:(push "/path/to/dir/" asdf:*central-registry*). 不要忘记尾部的斜线。
  4. 使用 加载系统(asdf:oos 'asdf:load-op :system-name)
  1. 有没有一种简单的方法可以让某人在 lisp 中启动并运行,而无需提前大量时间学习所有工具?

见上文——使用 clbuild。

于 2009-07-11T05:59:42.587 回答
6

Ubuntu 中最快的方法是使用该发行版中包含的软件包。如果你只是想尝试一些东西是“好的”,但这些版本通常比较旧。我会推荐这些软件包sbclslime. 如果您还不了解 emacs,您可以通过其内置教程(C-h t(按 Control-h,释放,然后按 t))快速入门。

然后您可以启动 emacs,启动 slime(通过M-x slime),打开一个 lisp 文件(C-x C-f ~/lisp/first-try.lisp),然后您就可以开始了。作为 Lisp 的教程,我认为 Practical Common Lisp 是一本非常好的书,并且可以免费获得。

现在,当您喜欢 Lisp 时,您可能想要更多最新的软件包。我建议为此使用clbuild(请参阅链接以获取更多信息,包括常见问题解答)。然后,您还可以构建一个新的 sbcl(由发行版的版本引导)。

顺便说一下, ASDF只是一个系统定义工具。它不知道如何下载包,它只知道如何将系统加载到正在运行的 Lisp 映像中。换句话说,它只是解决了自动加载某些“系统”(库)按正确顺序组成的多个文件的问题。最新版本允许加载一个包(在安装之后,例如通过 clbuild)

(asdf:load-sys 'foo)

旧版本显示了 ASDF 的内部操作概念:

(asdf:operate 'asdf:load-op 'foo)

以上load-sys是这个常见用例的简写。更多信息(可以说,您需要了解的所有信息)请参阅ASDF 入门指南。ASDF 也包含在 SBCL 中。

当您加载源文件时,它会自动编译(生成.fasl文件(快速加载)),以便下次加载更快。

于 2009-07-10T16:31:46.507 回答
2

可能最快的入门方法之一是使用Lisp in a Box(或LispBox 之类的衍生产品)。这些是您需要的全套设备。

你也可以试试Lisp Resource Kit,它是一个带有 Lisp 工具和文档的可引导 CDROM,所有这些都已经为你设置好了。只需将其放入您的 CDROM 驱动器并启动!

于 2009-07-11T00:17:31.133 回答
2

所有这些答案都很好,但是随着 Quicklisp 的新流行,它们已经变得有点过时了。很笼统地说,quicklisp 是 asdf 的包管理器。在系统上安装 Quicklisp 后,您可以使用(ql:quickload "name of lisp library")该库将该库加载到您的 lisp 环境中,包括下载它及其任何依赖项(如果需要)。例如,要下载、安装和加载 Hunchentoot 及其所有依赖项,请使用(ql:quickload "hunchentoot"). 在以后的 lisp 会话中,(ql:quickload "hunchentoot")再次调用将简单地加载已经下载和安装的版本,从而ql:quickload以一种简单的方式加载本地或远程可用的任何库。要安装 Quicklisp,我建议您访问quicklisp.org

更详细的解释

在库方面,Lisp 的工作方式与其他语言略有不同。首先要知道的是,该语言本身几乎不提供任何库功能——它具有load(遍历并运行文件中的每一行,就好像你在 REPL 中键入它们一样)和compile-file(它创建了一个“快速加载”文件,文件的预编译版本,它load可以执行得更快)。仅使用核心语言提供的内容,为了加载一个库,您必须访问它的每个文件和load它(或(load (compile-file "filename"))它,以获得更好的加载速度/性能)。这变得乏味,因此创建了各种库来管理库的加载,而目前asdf为王(以至于许多 lisp 实现实际上捆绑了它)。在 asdf 术语中,库被称为“系统”,.asdf 文件描述了加载它们所涉及的所有元数据——它们所依赖的系统以及加载文件的顺序,但它们仍然可能变得相当复杂。然后,Quicklisp 位于 asdf 之上。基本上,当 asdf 发现它无法找到某个系统时,Quicklisp 会介入并检查该系统是否可从 Quicklisp 的在线存储库之一获得,如果是,则下载它并让 asdf 继续前进。ql:quickload基本上只是 asdf 机器的包装器,用于加载使 quicklisp 能够根据需要提供帮助的系统。

于 2016-08-29T21:06:05.047 回答