所以我可以这样做:
(defparameter *some-function* ... ; returns lambda later
或这个:
(defun some-function ...
无论哪种,我都可以使用funcall:
(funcall 'some-function ...
要么
(funcall *some-function* ...
使用defun版本我也可以这样做:
(some-function ...
我不能用这个defparameter功能做到这一点.
defparameter提供更容易的技术,以便some-function稍后重新分配给不同的功能(或任何其他功能,包括非功能数据).
但除了这两点之外,使用一个还是另一个的其他考虑因素是什么?
这是一个奇怪的回答,因为我们有点比较苹果和橙子.
对于那些正在研究这种情况的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
Run Code Online (Sandbox Code Playgroud)
因此,在重新分配函数时,defparameter没有优势.此外,如果要重新定义该函数,可以查看编译命令.