Я пытаюсь запустить этот код:
(defparameter *digits-string* (uiop:read-file-string "day08.txt"))
(defparameter shape '(25 6))
(defun read-file-into-layers (filepath layer-w layer-h)
(with-open-file (stream filepath)
(do ((char (read-char stream) (read-char stream))
(layer-size (* layer-w layer-h))
(layers nil)
(layer nil)
(i nil))
((not (digit-char-p char)) layers)
(when (null layer) (setf layer (make-array layer-size)
i 0))
(setf (aref layer i) (digit-char-p char))
(incf i)
(when (= i layer-size) (progn (push layers layer)
(setf layer nil
i 0))))))
(https://github.com/AlbertoEAF/advent_of_code_2019/blob/d0a331157cbb3f37a16ae92f3cc2c56a35b3e00e/common-lisp/day08.lisp#L14 -L28 + day08.txt для https://adventofcode.com/2019/day/8 )
, который возвращает ноль, не знаю почему (файл содержит одну строку с 15k цифрами и символом новой строки в конце).
Я пытаюсь отладить с помощью:
;; 1) Set maximum debug level
(declaim (optimize (speed 0) (space 0) (debug 3)))
;; 2) Recompile the full module + C-u C-c C-c on that function (don't know if that last part is needed)
;; 3) step:
(step (READ-file-into-layers "day08.txt" 25 6))
Я до сих пор не вижу почти никакой переменной, и шаг только останавливается на (read-char stream)
и (incf i)
, больше ничего? И почти никакие переменные не определены!
Кроме того, если я нажму «e» для оценки некоторых выражений, хотя иногда некоторые переменные этого не делают появляются на трассировке стека, в этом случае она сообщает, что они вообще не определены.
Есть идеи, почему отладчик ведет себя так странно? Или это просто мой код, который полностью сломан? Тем не менее, отладчик был бы наиболее полезен в этом случае, если бы он работал: