如何以及在哪里为Ubuntu18上的sbcl/slime/emacs设置默认加载位置



我有emacs/sbcl/slime在工作。

我正在学习一个教程,并点击以下示例:

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

作者没有指定如何或在何处设置默认加载位置。

我尝试过创建EMACSLOADPATH环境变量,并尝试过为加载路径设置一个setq,但都没有得到积极的结果。

如果我使用/home/bill/lisp/hello.lisp中的整个路径加载一个.lsp文件,它就会加载并运行~/lisp";所以我可以避免绝对路径参考。

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

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

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

  1. 使用quicklisp或asdf,因为它们相当于python导入,但这可能意味着您定义了一个"系统"(python:'module'(并使用asdf:load system。以下是该解决方案的答案:在公共lisp中使用外部libs的示例
  2. 自己编写一个load函数,搜索文件名的预定义目录列表,形成一个绝对路径,然后使用您决定的绝对路径调用cl:load

最新更新