所以我可以这样做:
(defparameter *some-function* ... ; 稍后返回 lambda
或者这个:
(defun some-function ...
无论是哪种,我都可以使用 funcall
:
(funcall 'some-function ...
或者
(funcall *some-function* ...
使用 defun
版本我也可以这样做:
(一些函数...
我不能用 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
所以 defparameter 在重新分配函数时没有优势。另外,如果您想重新定义函数,可以查看 the compile command .
关于lisp - defparameter vs defun 用于传递函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19709228/