我定义我的函数等时,我不能在emacs + slime + sbcl上使用自动缩进功能.
我的.emacs文件配置是这样的:
(setq inferior-lisp-program
"D:/emacs/sbcl_1.0.37/sbcl.exe"
lisp-indent-function 'common-lisp-indent-function
slime-complete-symbol-function 'slime-fuzzy-complete-symbol
slime-startup-animation nil
slime-enable-evaluate-in-emacs t
slime-log-events t
slime-outline-mode-in-events-buffer nil
slime-repl-return-behaviour :send-only-if-after-complete
slime-autodoc-use-multiline-p t
slime-highlight-compiler-notes t)
(add-to-list 'load-path
"d:/emacs/site-lisp/slime") ; your SLIME directory
(require 'slime)
(slime-setup)
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗?
如果您运行SBCL(至少在Windows上,我在家中使用CLISP),您会收到消息"您的死小猫等待".我怀疑这与某种形式的内幕笑话有关(比如Super Cow Powers).我已经尝试了谷歌搜索,我发现没有什么特别有用的(我想它在其他地方提到的'网络是一些,如果不是很多,使用).
如果这看起来更像是SuperUser或ServerFault问题,请告诉我,我会在他们的论坛上提问.
似乎这个引用的起源是由Christopher Rhodes 提交到原始来源的1.54版本(感谢Daniel A. White找到了这个名字).我不确定这是否有用,但它是一个额外的途径来接近这个查询.
我需要像这样,元素的集合不包含任何元素的副本.Common Lisp,特别是SBCL,有这样的东西吗?
我想知道我应该在哪里保存.sbclrc文件.我尝试将其保存在我的.sbcl文件夹中,但它似乎没有工作.我正在使用Windows XP和Emacs版本23.
我正在尝试设置asdf-install,这就是为什么我在使用初始化文件.
谢谢你的时间.
我正在尝试理解如何解释Lisp调试器的输出和使用.
我有一个非常简单的Backtrace来评估我的函数,但我似乎无法弄清楚如何使用它来找出我的函数中发生异常的Lisp'形式'.
我很欣赏任何关于我应该做什么的线索,找到我的代码中错误产生的地方.
另外 - 为什么第二帧显示为"没有可用于帧的调试信息"?
我用调试器和repl附加了一个屏幕截图(我还在下面包含了我的函数 - 我知道这是非常错误的 - 但我只是对学习正确使用调试器感兴趣).另外,我在第一帧上点击'v'去了源,但这导致了repl下面的错误.(编辑 - 通过下载并将其复制到正确的路径来修复缺少的源代码问题)

(可怕的功能 - 请不要评论!)
(defun myquicksort2 (lst)
(if (eql 1 (length lst))
lst
(let ((mid (middle lst)))
(do ((i 0 (+ i 1)))
((>= i mid) (append (myquicksort2 (subseq lst 0 mid))
(myquicksort2 (subseq lst mid (length lst)))))
(if (> (ltval i lst) (nth 100 lst))
(let ((tmp (ltval i lst)))
(setf (nth i lst) (gtval i lst))
(setf (nth (- (- (length lst) i) 1) lst) tmp))))))) …Run Code Online (Sandbox Code Playgroud) 这是很容易改变CLISP的当前工作目录:
>cat ~/.clisprc.lisp
;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname))))
(when (probe-file quicklisp-init)
(load quicklisp-init)))
(cd "/media/E/www/qachina/db/doc/money")
(load "money")
Run Code Online (Sandbox Code Playgroud)
但是,似乎cd在SBCL中没有类似的功能.如何用SBCL完成这项工作?
我一直在尝试在我的可执行脚本中使用Quicklisp包.一个(平凡的)工作示例是:
#!/usr/bin/sbcl --script
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload "lisp-unit")) ;as explained by another question
(defpackage :test
(:use :cl :lisp-unit))
(format t "This is a test.")
Run Code Online (Sandbox Code Playgroud)
在chmod使用此代码(调用test.lisp)的文件后,我尝试执行它.但是,我收到以下错误消息:
Unhandled SB-C::INPUT-ERROR-IN-LOAD in thread #<SB-THREAD:THREAD
"main thread" RUNNING
{1002C16923}>:
READ error during LOAD:
Package QL does not exist.
Line: 4, Column: 15, File-Position: 95
Stream: #<SB-SYS:FD-STREAM
for "file /home/koz/Documents/Programming/CL/trees/test.lisp"
{1002C19A93}>
Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1002C16923}>
0: ((LAMBDA NIL :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX))
1: (SB-IMPL::CALL-WITH-SANE-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX) {1002C2498B}>) …Run Code Online (Sandbox Code Playgroud) 解决Euler项目问题我得到的是我需要使用长数字的数字作为字符串进行操作.我使用sbcl在linux,emacs,slime中工作.
例如,为了得到这个数字2的数字之和,我这样工作,
1)获得力量
CL-USER> (defparameter *answer-as-integer* (expt 2 1000))
*ANSWER-AS-INTEGER*
CL-USER> *ANSWER-AS-INTEGER*
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
Run Code Online (Sandbox Code Playgroud)
感谢Common Lisp,这非常简单.现在我相信一个好方法应该是将reduce应用于这个数字序列.
2)获取字符串
CL-USER> (defparameter *answer-as-string* (write-to-string *ANSWER-AS-INTEGER*))
*ANSWER-AS-STRING*
CL-USER> *ANSWER-AS-STRING*
"10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376"
Run Code Online (Sandbox Code Playgroud)
现在我有了序列,所以应用reduce,但是我得到错误的东西:这是一个char所以我将转换字符应用于整数:
CL-USER> (reduce #'(lambda (x y) (+ (digit-char-p x) (digit-char-p y))) *ANSWER-AS-string*)
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
The value 1 is not of type CHARACTER.
[Condition of type TYPE-ERROR]
Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT] Abort thread (#<THREAD "repl-thread" RUNNING {1005DE80B3}>)
Backtrace:
0: (DIGIT-CHAR-P 1) [optional]
1: ((LAMBDA …Run Code Online (Sandbox Code Playgroud) 我试图安装CL-jupyter(成为共口齿不清内核Jupyter),我不能让它工作:当我打开一个新的口齿不清的笔记本电脑(或更改现有的笔记本电脑的内核),它显示后崩溃以下消息:
[I 18:26:50.855 NotebookApp] Kernel started: ccba815a-9065-4fad-9d95-06f6291136d2
To load "cl-jupyter":
Load 1 ASDF system:
cl-jupyter
; Loading "cl-jupyter"
...............
cl-jupyter: an enhanced interactive Common Lisp REPL
(Version 0.7 - Jupyter protocol v.5.0)
--> (C) 2014-2015 Frederic Peschanski (cf. LICENSE)
kernel configuration = ((hb_port . 58864) (shell_port . 37462)
(transport . tcp) (iopub_port . 43232)
(signature_scheme . hmac-sha256) (control_port . 52184)
(stdin_port . 45879)
(key . 2ae7d65f-65f9-40d8-bfd4-21760eaec0ca)
(ip . 127.0.0.1))
[Hearbeat] starting...
[Heartbeat] thread started
[Heartbeat] thread …Run Code Online (Sandbox Code Playgroud) 这种情况一次又一次地发生在我身上:我定义了这个类并忘记了我想要它的功能,或者它是,例如,Gtk小部件类,因此它的元类需要说明.一旦它被定义,但是,SBCL不会让我改变了我的元类(即使没有这个类的实例).例如,评估
(defclass foo ()
((slot-a)))
Run Code Online (Sandbox Code Playgroud)
然后添加元类并重新评估:
(defclass foo ()
((slot-a))
(:metaclass gobject:gobject-class))
Run Code Online (Sandbox Code Playgroud)
导致错误:
Cannot CHANGE-CLASS objects into CLASS metaobjects.
[Condition of type SB-PCL::METAOBJECT-INITIALIZATION-VIOLATION]
See also:
The Art of the Metaobject Protocol, CLASS [:initialization]
Run Code Online (Sandbox Code Playgroud)
不幸的是,我没有"元对象协议的艺术"的副本来检查它的内容.现在我唯一可以解决的方法是重启lisp,这可能会造成很大的破坏性.
由于我很快意识到错误,我不介意通过删除它完全避开已定义的类.问题:
fmakunbound功能一样的东西.