5

所以我可以这样做:

(defparameter *some-function* ... ; returns lambda later

或这个:

(defun some-function ...

无论哪种方式,我都可以使用funcall

(funcall 'some-function ... 或者 (funcall *some-function* ...

使用该defun版本,我也可以这样做:

(some-function ...

我不能用这个defparameter功能做到这一点。

defparameter为稍后重新分配some-function给不同的功能(或其他任何东西,包括非功能数据)提供了更简单的技术。

但是除了这两点之外,还有什么其他的考虑因素呢?

4

1 回答 1

9

这是一个奇怪的回答,因为我们有点比较苹果和橙子。

对于那些正在研究这个的 lisp 新手,defparameter 用于定义动态变量,而 defun 用于定义函数。

如果您担心能够在不使用 defun 的情况下以编程方式重新分配函数,请查看以下内容:

CL-USER> (defun jam () (print 'some-jam))
JAM

CL-USER> (jam)
SOME-JAM 

CL-USER> (setf (symbol-function 'jam) (lambda () (print 'some-ham)))
#<FUNCTION (LAMBDA ()) {1004C033DB}>

CL-USER> (jam)
SOME-HAM 

因此,在重新分配函数时,defparameter 没有优势。此外,如果您想重新定义函数,您可以查看编译命令

于 2013-10-31T14:51:09.607 回答