Joe*_*oel 9 lisp sbcl common-lisp
我正在尝试理解如何解释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)))))))
(defun ltval (i lst)
(nth i lst))
(defun gtval (i lst)
(nth (- (- (length lst) i) 1) lst))
(defun middle (lst)
(round (/ (length lst) 2)))
Run Code Online (Sandbox Code Playgroud)
错误在于>,而您的源代码中只有一个>,所以这就是问题所在。
编辑内置 CL 函数很容易在 SBCL 中进行优化,因此尽管代码中的函数调用是CL:<,但实际调用的代码(并显示在调试器中)来自优化的、特定的 SBCL 内部例程。对于用户定义的函数来说,这不是一个问题,您将更有可能获得有用的框架。