Я изучаю общий язык и CLOS.
Я начал с учебника с http://cl-cookbook.sourceforge.net/clos-tutorial/
В разделе 4.3 упоминалось, что
Обобщенная функция — это лисп-функция, которая связана с набором методов и отправляет их при вызове.
Также представлены две функции generic-function-methods
и method-generic-function
:
CL-USER 63 > #'my-describe
#<STANDARD-GENERIC-FUNCTION MY-DESCRIBE 21111C2A>
CL-USER 64 > (generic-function-methods #'my-describe)
(#<STANDARD-METHOD MY-DESCRIBE NIL (T) 2110B544>
#<STANDARD-METHOD MY-DESCRIBE NIL (ANIMAL) 21111BF4>)
CL-USER 65 > (method-generic-function (car *))
#<STANDARD-GENERIC-FUNCTION MY-DESCRIBE 21111C2A>
Я могу понять 1-й (то есть generic-function-methods
), он сообщает мне набор методов в универсальной функции my-describe
.
А как насчет второго (то есть (method-generic-function (car *))
)?
Я не совсем понимаю.
PS: я пытался использовать эту функцию в REPL, но не удалось:
CL-USER> #'method-generic-function
undefined.
[Condition of type UNDEFINED-FUNCTION]
Моя среда — это SBCL + quicklisp + слизь.
Могу ли я использовать эту функцию в SBCL?
Спасибо.
Обновлять:
Кажется, я понимаю значение method-generic-function
:
Он просто возвращает универсальную функцию из конкретного метода #<STANDARD-METHOD MY-DESCRIBE NIL (T) 2110B544>
.
Сбивает с толку то, что *
в (car *)
, кажется, возвращает значение последнего выражения.