#debugging #common-lisp #sbcl
#отладка #common-lisp #sbcl
Вопрос:
Как проанализировать неизвестный исходный код Common lisp, чтобы понять его?
Учитывая, у меня есть исходный код функции на Common Lisp. Эта воображаемая функция работает с произвольными и сложными данными. Теперь я хотел бы проанализировать такую функцию.
Итак, я заинтересован в рабочих методах анализа некоторого заданного исходного кода common lisp. Т.е. Путем пошагового просмотра исходного кода, как это можно сделать с исходным кодом elisp в Emacs с помощью edebug-defun
.
Моими инструментами являются slime, sbcl и Emacs.
Конец фактического вопроса, приведенные ниже сведения написаны только для того, чтобы дать лучшее представление о том, о чем идет речь в этом вопросе.
Примечания по вопросам предыстории:
- Меня не интересует, что делает приведенная выше функция, поскольку
- Я уже знаю основы common lisp, такие как
if
,dolist
,defun
и основы. Кроме того, я также знаю, как запрашивать CLHS. - Вероятно, я мог бы просмотреть код и данные с помощью ручки и бумаги, но зачем? Когда я сижу перед компьютером.
- Я уже прочитал CL Cookbook — Руководство по отладке и отладке Malispers
Вот пример такой функции, ответ не обязательно должен ссылаться на эту функцию:
(defun wins (grid color)
(declare (optimize (speed 0)
(debug 3)))
(dolist (phase *phase*)
(dolist (start (car phase))
(if (= (* 4 color)
(reduce #' (cadr phase)
:key
(lambda (offset)
(aref grid ( start offset)))))
(return-from wins t)))))
Учитывая приведенный выше код, для меня остается загадкой, когда какие части произвольных данных обрабатываются и как. Вероятно, было бы полезно увидеть это в действии.
В этом специальном примере я пытался использовать (step (wins ...))
, но это останавливается только на (* 4 color)
, (reduce ...
и (* start offset)
, чего недостаточно (для меня) для понимания функции.
Также (trace wins)
не очень помогло.
Я взял эту функцию из учебника по common lisp, в котором она уже объясняется. Поэтому нет необходимости объяснять эту функцию.
Комментарии:
1. ммм … ваш вопрос больше подходит для reddit / r / common_lisp или другого форума.
2. Вы можете искать документацию символов и функций программно с
documentation
помощью .3. @Ehvince почему я должен искать документацию, когда ее не существует, и я хочу знать, как функция обрабатывает данные?
4.
Foreign common lisp code
также может означать код lisp, который имеет дело с взаимодействием с другими языками. common-lisp.net/project/cffi . Я предлагаю использовать фразу «Неизвестный код», а не иностранный.