我正在尝试了解如何解释和使用 Lisp 调试器的输出。
我有一个非常简单的 Backtrace 来评估我的函数,但我似乎无法弄清楚如何使用它来找出异常发生在我的函数中的哪个 Lisp 'form' 中。
我很感激任何关于我应该做什么的线索,以找到我的代码中错误的来源。
另外 - 为什么第二帧显示为“没有可用于帧的调试信息”?
我附上了调试器和 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)))