为什么我们必须使用funcall
Common Lisp 中调用高阶函数?例如,为什么我们必须使用:
(defun foo (test-func args)
(funcall test-func args))
而不是更简单的:
(defun bar (test-func args)
(test-func args))
来自程序背景,我对此感到有点惊讶,因为我更习惯的语言(例如 Python、C#)不需要区分。特别是,至少在源代码级别,C# 编译器将其转换为类似func.invoke()
.
我看到的唯一问题是,这意味着我们不能再调用全局函数test-func
,因为它会被遮蔽,但这几乎不是问题。