Lisp デバッガーの出力を解釈し、使用する方法を理解しようとしています。
関数を評価するための非常に単純なバックトレースがありますが、それを使用して、関数内のどの Lisp 'フォーム' で例外が発生したかを調べる方法がわかりません。
コードのどこでエラーが発生したかを見つけるために、何をすべきかについての手がかりをいただければ幸いです。
また、2 番目のフレームに「フレームのデバッグ情報がありません」と表示されるのはなぜですか?
デバッガーのスクリーン ショットと 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)))