【发布时间】:2017-06-01 22:35:11
【问题描述】:
在 Scheme 中,您可以定义类似的函数
(define f (lambda (x) ...))
特别是,你可以做这样的事情
(define f (g))
其中 g 是一些返回函数的函数。是否可以在 Common Lisp 中做同样的事情,即将函数符号与给定的匿名函数相关联?
【问题讨论】:
标签: scheme common-lisp ansi-common-lisp
在 Scheme 中,您可以定义类似的函数
(define f (lambda (x) ...))
特别是,你可以做这样的事情
(define f (g))
其中 g 是一些返回函数的函数。是否可以在 Common Lisp 中做同样的事情,即将函数符号与给定的匿名函数相关联?
【问题讨论】:
标签: scheme common-lisp ansi-common-lisp
没关系,我刚刚在 Paul Graham 的书 ANSI Common Lisp 中找到了答案(第二次查看后;第 99 页):
(setf (symbol-function 'f) (lambda (x) (* x x)))
实现(对于大多数意图和目的)与
相同(defun f (x) (* x x))
【讨论】:
defun 做的远不止这些。 (macroexpand '(defun f (x) (* x x)))
defun 会通知编译器该函数以避免在同一文件中出现引用警告,即使该函数是在引用之后声明的。大多数实现都会注释他们在哪里找到了定义,例如defuns,以便 IDE 或 Emacs+Slime 可以跳转到它们。使用setf 或symbol-function,您不会得到任何这些。