【问题标题】:What' the meaning of method-generic-function?方法-泛型-函数是什么意思?
【发布时间】:2020-12-04 05:07:38
【问题描述】:

我正在学习 common-lisp 和 CLOS。

我从http://cl-cookbook.sourceforge.net/clos-tutorial/的教程开始

在 4.3 节中提到

泛型函数是一个 lisp 函数,它与一组方法相关联并在调用时分派它们。

它还提供了两个函数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的意思了:

它只是从特定方法 #&lt;STANDARD-METHOD MY-DESCRIBE NIL (T) 2110B544&gt; 返回泛型函数。

令人困惑的是(car *)中的*,它似乎返回了最后一个表达式的值。

【问题讨论】:

    标签: common-lisp sbcl clos


    【解决方案1】:
    • 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 中,* 指的是最后一个计算表达式的第一个返回值。在您的情况下,这是generic-function-methods 返回的方法列表。所以你看到这两个在这种一对多关系中或多或少是反函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 2019-04-02
      • 2016-10-17
      • 2012-04-19
      • 1970-01-01
      相关资源
      最近更新 更多