标准定义的通用函数是什么?

时间:2017-11-15 22:35:08

标签: common-lisp clos

在Common Lisp中,标准定义了一些通用函数,例如操作序列的函数。

然而,在相关章节中查看Graham的书 ANSI Common Lisp 和Steele的书 Common Lisp - 语言,我找不到任何定义的通用函数列表标准。

标准定义的通用功能是什么?

2 个答案:

答案 0 :(得分:4)

您提出的问题

操纵sequences的功能 是不是 generic-function。 它们列在17.3 The Sequences Dictionary部分中。

由...指定的所有symbol 标准列在1.9 Symbols in the COMMON-LISP Package部分。

部分标准化列表 generic functions可以 在7.7 The Objects Dictionary部分中找到(例如, print-object列于。{ 第22.4 The Printer Dictionary}节。

您可能要提出的问题

查找现有的Lisp功能应该不会很难使用 apropos。 一旦看到看似合理的符号,请使用 describe找出它是什么 实际上。

请记住,大多数实现提供的标准更多。 你可以这样做:

(dolist (pack (package-use-list "COMMON-LISP-USER"))
  (format t "~S~%" pack)
  (do-external-symbols (s pack)
    (when (and (fboundp s)
               (typep (fdefinition s) 'generic-function))
      (format t "  ~S~%" s))))

答案 1 :(得分:1)

我目前认为没有比浏览CLHS Master Index和grep for" Generic Function"的页面更好的方法了。

使用脚本

将此建议应用于HyperSpec的本地副本
% sed -n -e '
/Standard Generic Function/{
 s/.*Standard Generic Function *//
 s|</A>||
 p
}' X_Mast_*.htm | sort -u

产生以下列表

(SETF CLASS-NAME)
ADD-METHOD
ALLOCATE-INSTANCE
CHANGE-CLASS
CLASS-NAME
COMPUTE-APPLICABLE-METHODS
DESCRIBE-OBJECT
DOCUMENTATION, (SETF DOCUMENTATION)
FIND-METHOD
FUNCTION-KEYWORDS
INITIALIZE-INSTANCE
MAKE-INSTANCE
MAKE-INSTANCES-OBSOLETE
MAKE-LOAD-FORM
METHOD-QUALIFIERS
NO-APPLICABLE-METHOD
NO-NEXT-METHOD
PRINT-OBJECT
REINITIALIZE-INSTANCE
REMOVE-METHOD
SHARED-INITIALIZE
SLOT-MISSING
SLOT-UNBOUND
UPDATE-INSTANCE-FOR-DIFFERENT-CLASS
UPDATE-INSTANCE-FOR-REDEFINED-CLASS