首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Emacs/Slime/SBCL识别quicklisp包

如何使Emacs/Slime/SBCL识别quicklisp包
EN

Stack Overflow用户
提问于 2015-10-07 23:13:53
回答 3查看 2.3K关注 0票数 5

我正试着让Emacs,黏液和quicklisp一起正常工作。我设置了以下环境:

  • 已安装Emacs
  • 在Emacs中安装黏液
  • 安装SBCL
  • 已安装的quicklisp
  • 在SBCL中运行(quicklisp-quickstart:install)
  • 在SBCL中运行(ql:add-to-init-file)
  • 在SBCL中运行(ql:quickload "quicklisp-slime-helper")
  • 在SBCL中使用(ql:quickload "cl-csv")安装csv软件包
  • (setq inferior-lisp-program "sbcl")添加到.emacs
  • (load (expand-file-name "~/quicklisp/slime-helper.el"))添加到.emacs
  • 重新开始一切

我有一个以test.lisp开头的(ql:quickload "cl-csv")文件来加载包并使用它。当我将文件加载到Emacs并运行SLIME,然后尝试使用slime-compile-and-load-file编译它时,我会得到Package CL-CSV does not exist在SBCL中的错误。

我错过了什么让这些零件正常工作?

EN

回答 3

Stack Overflow用户

发布于 2015-10-08 06:53:01

如果您编译一个包含语句的文件

代码语言:javascript
复制
(ql:quickload "cl-csv")

然后将编译此调用,但不执行该调用。这就是编译器通常所做的:它编译,但不执行。因此,如果稍后在同一个文件中使用一些Lisp包(命名空间)--这个包将在系统cl-csv中引入--那么通过加载系统,它可能不会出现,如果您以前没有加载它。

对此有两个典型的解决方案:

  • 将loads命令放入以前编译(可选)和/或加载的文件中
  • EVAL-WHEN:compile-toplevel:load-toplevel:execute结合使用

请注意,cl-csv是一个组织源文件的系统。包是用于组织Lisp符号的Lisp命名空间。包和系统可以有相同的名称,但它们实际上是两种不同的东西。

票数 8
EN

Stack Overflow用户

发布于 2015-10-08 09:14:22

直接调用ql:quickload对测试和与您的开发环境交互都有好处。如果您经常使用某些系统,您可以在初始化文件(在您的例子中是~/.sbclrc)中快速加载它们。

但是,编程的目的通常是开发一个新系统(库或应用程序,但就Common而言,这是一个“系统”)。您通常不需要在源代码中有显式的(ql:quickload ...)调用。相反,您可以定义一个系统,在该系统中声明依赖项,并且代码假定加载了适当的依赖项。

  • 创建并输入目录"my-system“
  • 创建和编辑"my-system.asd“ (包内:asdf-user) (defsystem :my-system :依赖性(:csv))

如果您将~/quicklisp/local-projects/中的目录链接起来,Quicklisp可以找到您的系统。因此,下次重新启动Lisp并希望在my-system上进行开发时,您可以执行(ql:quickload :my-system),这将加载所有声明的依赖项。

票数 5
EN

Stack Overflow用户

发布于 2021-01-04 09:44:32

在Emacs的黏液REPL.上重新安装quicklisp

问题是,Emacs (REPL)既不知道quicklisp是否安装,也不知道它是在哪里安装的。要解决这个问题,您所要做的就是在Emacs‘slime 上重新安装quicklisp。("quicklisp.lisp“文件应该位于SLIME的当前工作文件夹中。)

代码语言:javascript
复制
M-x slime 
CL-USER> (load "quicklisp.lisp")
CL-USER> (quicklisp-quickstart:install)
CL-USER> (ql:add-to-init-file)
CL-USER> (ql:quickload "quicklisp-slime-helper")    

例如)我的“~/..emacs”档案

代码语言:javascript
复制
(use-package slime
  :ensure t
  :defer t
  :init
    (setq inferior-lisp-program "clisp")
  :config      
    (slime-setup '(slime-fancy slime-company))
  :hook
  (slime-mode . slime-company)
  (slime-mode . (lambda ()
                  (load (expand-file-name "D:/util/emacs27/quicklisp/slime-helper.el"))
                  (add-to-list 'slime-contribs 'slime-fancy)
                  (add-to-list 'slime-contribs 'inferior-slime))))

(use-package slime-company
  :after slime
  :bind-keymap 
    ("C-n" . company-select-next)
    ("C-p" . company-select-previous)
    ("C-d" . company-show-doc-buffer)
    ("M-." . company-show-location)
  :config (setq slime-company-completion 'fuzzy
                slime-company-after-completion 'slime-company-just-one-space))

然后,quicklisp将重新安装在Emacs的主目录("~/")中。现在,您已经在(a) Windows 10的主页和(a) Emacs的家中安装了相同的quicklisp。如果您只在Emacs‘Slime上使用quicklisp,Windows 10’HOME中的副本是无用的,您可以删除它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33003993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档