【问题标题】:How and where to set the default load location for sbcl / slime / emacs on Ubuntu 18如何以及在何处为 Ubuntu 18 上的 sbcl / slime / emacs 设置默认加载位置
【发布时间】:2020-07-21 20:36:52
【问题描述】:

我有 emacs / sbcl / slime 工作。

我正在阅读教程并点击以下示例:

CL-USER> (load "hello.lisp")
; Loading /home/peter/my-lisp-programs/hello.lisp

作者没有说明他如何或在哪里设置默认加载位置到他的示例。

我已尝试创建 EMACSLOADPATH 环境变量,并尝试为加载路径设置 setq,但均未获得积极结果。

如果我使用 /home/bill/lisp/hello.lisp 中的整个路径加载 .lisp 文件,它会加载并且我可以运行它。我想知道如何以及在哪里将默认设置为“~/lisp”,这样我就可以避免绝对路径引用。

【问题讨论】:

  • 通过该示例,您似乎正在阅读 Peter Seibel 的“Practical Common Lisp”的第 2 章。该章的脚注 13 说“......使用 SLIME 快捷方式 cd 来改变 Lisp 对当前目录的看法——输入一个逗号,然后在提示输入命令时输入 cd,然后输入保存 hello.lisp 的目录的名称。 "

标签: emacs load common-lisp sbcl slime


【解决方案1】:

在回答之前,EMACSLOADPATH(或加载路径)与 common-lisp 或 sbcl(这是一个 common-lisp 实现)无关。它是一个与 emacs 相关的变量。混淆的根源是可以理解的,因为 emacs 是基于其自己的 lisp、elisp 变体构建的工具,并且您编写 elisp 代码来扩展或配置 emacs。 Emacs 工具有自己的 elisp 引擎来运行这些 elips 命令。然后你开始使用 emacs 作为编辑器来编写 common-lisp 代码,使用像 slime 这样的插件来更容易与 sbcl 解释器(或任何其他兼容 slime 的 common-lisp 解释器)交互。

对于common-lisp的默认加载位置,sbcl的加载函数使用*default-pathname-defaults*从参数形成路径名,一般设置为当前目录(至少通过slime-check swank :set-default-directory)。

但是,如果您想要一种类似于 python 的导入的方法,其中该函数使用目录列表进行搜索,我相信有两个选项可以开始。

  1. 使用 quicklisp 或 asdf,因为它们等同于 python-import,但这可能意味着您定义了一个“系统”(python:“模块”)并使用 asdf:load-system。这是此解决方案的答案:example of using external libs in common-lisp
  2. 自己编写一个加载函数,并为文件名搜索预定义的目录列表,并形成一个绝对路径,然后使用您决定的绝对路径调用 cl:load。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2010-10-20
    • 2015-12-05
    相关资源
    最近更新 更多