【发布时间】:2020-12-04 05:07:38
【问题描述】:
我正在学习 common-lisp 和 CLOS。
我从http://cl-cookbook.sourceforge.net/clos-tutorial/的教程开始
在 4.3 节中提到
泛型函数是一个 lisp 函数,它与一组方法相关联并在调用时分派它们。
它还提供了两个函数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>
我可以理解第一个(即generic-function-methods),它告诉我泛型函数my-describe中的一组方法。
但是第二个(即(method-generic-function (car *)))呢?
我不太明白。
PS:我尝试在REPL中使用这个函数,但是失败了:
CL-USER> #'method-generic-function
undefined.
[Condition of type UNDEFINED-FUNCTION]
我的环境是 SBCL + quicklisp + slime。
我可以在 SBCL 中使用这个功能吗?
谢谢。
更新:
我好像明白method-generic-function的意思了:
它只是从特定方法 #<STANDARD-METHOD MY-DESCRIBE NIL (T) 2110B544> 返回泛型函数。
令人困惑的是(car *)中的*,它似乎返回了最后一个表达式的值。
【问题讨论】:
标签: common-lisp sbcl clos