LINUX.ORG.RU

Сообщения j-a-t-a

 

[CL] defun и setf

Первые сто страниц ANSI Common Lisp наивно полагал, что setf — это присваивание какому-то символу вычисленного второго аргумента, а defun — это просто специализированная обертка вокруг setf для создания функций. Т.е. ассоциирование с символом какого-то кода. Но на сотой странице Грэм производит пробный взрез мозга:

By making the first argument to defun a list of the form (setf f), you define what happens when the first argument to setf is a call to f. The following pair of functions defines primo as a synonym for car:

 (defun primo (1st ) (car 1st))

 (defun (setf primo) (val 1st)
    (setf (car 1st) val)) 
In the definition of a function whose name is of the form (setf f), the first parameter represents the new value, and the remaining parameters represent arguments to f. Now any setf of primo will be a call to the latter function above:
> (let ((x (list 'a 'b 'c)))
       (setf (primo x) 480)
      x)
(480 B C)

На ум приходит только operator= и что-то вроде operator* из C++. Но зачем это нужно? Ведь в (setf (primo x) 480), где primo равнозначно car, car и вернет ссылку, которой можно присвоить. Что Я Думаю Не Так?

j-a-t-a
()

[Lisp,новичье] Отладка в slime

Время от времени на форуме проскакивают гневные крики анонимуса-лиспера о жалких людишках, нуждающихся в отладчике. Притом идут намеки на принципиальную разницу в процессах разработки, отладки, профайлинга и т.д. Так в чем же принципиальная разница (с точки зрения обычного сишного императивщика)? В минимизации сайд-эффектов? Особенно интересует именно отладка.
И к более земным вопросам: есть ли какие-нибудь параллели у sldb и gdb? Я нашел команды типа step, next etc, но как войти в режим отладки? У меня sldb вылезает только после неправильного действия. Допустим, я хочу просто пройти по функции с аргументами на момент падения, посмотреть переменные, трассировку.

j-a-t-a
()

RSS подписка на новые темы