Почему мы должны использовать 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
, потому что она будет затенена, но это вряд ли проблема.