所以我可以这样做:
(defparameter *some-function* ... ; returns lambda later
或者这个:
(defun some-function ...
使用其中之一,我可以使用funcall
:
(funcall 'some-function ...
要么
(funcall *some-function* ...
使用defun
版本,我也可以这样做:
(some-function ...
我无法使用defparameter
函数执行此操作。
defparameter
提供了更简单的方法,可以在以后将some-function
重新分配给不同的函数(或其他任何内容,包括非函数数据)。
但除了这两点之外,使用一个还是另一个的其他考虑因素是什么?
答案 0 :(得分:9)
这是一个奇怪的回答,因为我们在某种程度上比较苹果和橙子。
对于那些正在研究这种情况的新手来说,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没有优势。此外,如果您想重新定义该功能,可以查看the compile command。