method-generic-function 的含义是什么?

What' the meaning of method-generic-function?

我正在学习 common-lisp 和 CLOS。

我从 http://cl-cookbook.sourceforge.net/clos-tutorial/

的教程开始

4.3节中提到

A generic function is a lisp function which is associated with a set of methods and dispatches them when it's invoked.

它还有两个函数generic-function-methodsmethod-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的意思:

它只是 return 来自特定方法的通用函数 #<STANDARD-METHOD MY-DESCRIBE NIL (T) 2110B544>

迷惑的是(car *)中的*,好像return是最后一个表达式的值。

  • Method-generic-function 为您提供与给定方法关联的通用函数。
  • Method-generic-function 未导入到 SBCL 中的 cl-user 包中。您会在 sb-mop 中找到它(因此,sb-mop:method-generic-function)。 MOP 并未完全纳入 Common Lisp 标准。
  • 对于整个 MOP 的便携式使用,请使用库“Closer to MOP”(closer-mop)。
  • 在 REPL 中,* 指的是最后一个计算表达式的第一个 return 值。在您的例子中,这是由 generic-function-methods 编辑的方法列表 return。所以你看到这两个在这个one-to-many关系中或多或少是反函数。