Помогите с использованием отладчика Lisp - PullRequest
9 голосов
/ 09 января 2011

Я пытаюсь понять, как интерпретировать вывод и использовать отладчик Lisp.

У меня есть довольно простой Backtrace для оценки моей функции, но я не могувыяснить, как его использовать, чтобы выяснить, в какой «форме» Lisp в моей функции произошло исключение.

Буду признателен за любые подсказки относительно того, что я должен делать, чтобы найти, где в моем коде ошибкаoriginated.

Кроме того - почему второй кадр отображается как «нет доступной отладочной информации для кадра»?

Я прикрепил снимок экрана с помощью отладчика и repl (я такжениже я включил мою функцию - я знаю, что это очень неправильно - но я просто заинтересован в том, чтобы научиться правильно использовать отладчик).Кроме того, я нажимаю 'v' в первом кадре, чтобы перейти к источнику, но это привело к ошибке ниже repl.(РЕДАКТИРОВАТЬ - проблема с отсутствующим исходным кодом устраняется путем загрузки и копирования по правильному пути)

alt text

(ужасная функция - без комментариев, пожалуйста!)

(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)))

1 Ответ

4 голосов
/ 09 января 2011

Ошибка с >, и у вас есть только один > в вашем источнике, вот в чем проблема.

edit Встроенные функции CL очень склонны к оптимизации в SBCL, поэтому, хотя вызов функции в вашем коде равен CL:<, код, который фактически вызывается (и который отображается в отладчике ) из оптимизированной, специфичной внутренней SBCL-программы. Это менее важно для пользовательских функций, где у вас будет гораздо больше шансов получить полезный фрейм.

...