【问题标题】:Newbie question about Lisp and Packages关于 Lisp 和包的新手问题
【发布时间】:2009-07-10 13:49:43
【问题描述】:

如果你不关心,只想看问题,这里是背景故事。

所以我在 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 中启动并运行,而无需提前大量时间学习所有工具?

【问题讨论】:

    标签: lisp packages common-lisp hunchentoot


    【解决方案1】:

    嗯...好吧,嗯,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。

    【讨论】:

    • 第 4 步现在可以是 (asdf:load-sys :system-name)。
    【解决方案2】:

    在 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 Getting Started guide。 ASDF 也包含在 SBCL 中。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        所有这些答案都很好,但是随着 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(它创建“快速加载”文件,该文件的预编译版本,loads 和 可以 执行得更快)。仅使用核心语言提供的内容,为了加载一个库,您必须访问它的每个文件并 load 它(或 (load (compile-file "filename")) 它,以获得更好的加载速度/性能)。这变得乏味,因此创建了各种库来管理库的加载,目前asdf 是王者(以至于许多 lisp 实现实际上捆绑了它)。在 asdf 术语中,库被称为“系统”,.asdf 文件描述了加载它们所涉及的所有元数据——它们所依赖的系统以及加载文件的顺序,但它们仍然可能变得相当复杂。然后,Quicklisp 位于 asdf 之上。基本上,当 asdf 发现它无法找到某个系统时,Quicklisp 会介入并检查该系统是否可从 Quicklisp 的在线存储库之一获得,如果是,则下载它并让 asdf 继续前进。 ql:quickload 基本上只是 asdf 机制的一个包装器,用于加载支持 quicklisp 以根据需要提供帮助的系统。

        【讨论】:

          猜你喜欢
          • 2021-06-23
          • 1970-01-01
          • 2011-02-01
          • 2011-02-17
          • 1970-01-01
          • 1970-01-01
          • 2021-02-10
          • 1970-01-01
          相关资源
          最近更新 更多