我在Ubuntu Raring上使用SLIME / SBCL / Emacs和Quicklisp。我有下面定义的功能。我想将其添加到我的Lisp库的顶级.lisp文件中,即彼此依赖的一个文件,这样我就可以在我用库编写的所有函数中使用它,只需添加(update-swank)一个函数即可,而不必添加下面的整个功能,以及使用该功能的每段代码。
(defun update-swank ()
"Grabs SWANK connections and tells it to handle requests.
Call this every loop in the main loop of your program"
(continuable
(let ((connection (or swank::*emacs-connection*
(swank::default-connection))))
(when connection
(swank::handle-requests connection t)))))
Run Code Online (Sandbox Code Playgroud)
当我这样做并重新启动emacs时,由于我的asdf:load-op.sbclrc文件中包含,因此在加载过程中加载了我的库,我得到了
READ error during COMPILE-FILE:
;
; Package SWANK does not exist.
Run Code Online (Sandbox Code Playgroud)
在劣等的Lisp中,由于库未加载,SLIME被卡住了轮询,因为在我当前的设置中,SLIME / SBCL update-swank在加载其中的.lisp文件时不知道到底是什么。我尝试添加(in-package :swank)到其中的文件update-swank中,但是得到了
The name "SWANK" does not designate any package.
Run Code Online (Sandbox Code Playgroud)
在emacs启动时加载我的库时,性能下降。
我搜索了CEPL(从https://github.com/cbaggers/cepl/blob/master/cepl-utils.lisp获得更新更新),然后复制了CEPL的创建者所做的工作并将函数导出到了我的包中.lisp。我确保像他在cepl-utils的第20行上一样添加了该功能,在这里https://github.com/cbaggers/cepl/blob/master/cepl-utils.lisp ...... 我加载了我的库btw与
(asdf:operate 'asdf:load-op :cl-test)
(in-package #:cl-test)
Run Code Online (Sandbox Code Playgroud)
在我假设的.sbclrc文件中,我假设文件是.emacs 在emacs启动之前加载史莱姆之前加载的(我已经(slime)在我的.emacs文件中)...我刚刚测试了从中删除adsf:load-opand in-packageand 并在加载史莱姆/天鹅之后.sbclrc运行asdf:load-op了我一直试图在这里工作没有错误....但是我希望能够在emacs启动时自动加载我的库,而我通常这样做的方法是将它添加asdf:load-op到我的.sbclrc....如果有人可以告诉我另一种在swank加载后在emacs启动时自动加载我的库的方法,这将回答这个问题吗?
如果正在运行的Lisp中没有定义任何程序包,则不能使用该程序包。首先,您需要定义包,然后可以从该包中读取符号。当CL尝试从未知程序包中读取符号时,不会创建程序包。
如果(find-package "FOO")返回NIL,那么您将无法读取符号FOO::BAR。
两种解决方案是:
在读取包中的符号之前执行包定义
从源代码中删除符号:
例:
foo::*bar*
Run Code Online (Sandbox Code Playgroud)
用。。。来代替
(symbol-value (find-symbol "*BAR*" "FOO"))
Run Code Online (Sandbox Code Playgroud)
上面的代码在运行时查找符号并检索符号值。
也:
(foo::bar :baz t)
Run Code Online (Sandbox Code Playgroud)
用。。。来代替
(funcall (symbol-function (find-symbol "BAR" "FOO")) :baz t)
Run Code Online (Sandbox Code Playgroud)
上面在运行时查找符号,检索函数并调用它。