Почему мы должны использовать funcall
для вызова функций более высокого порядка в Common Lisp? Например, почему мы должны использовать:
(defun foo (test-func args)
(funcall test-func args))
вместо простого:
(defun bar (test-func args)
(test-func args))
Исходя из процедурного фона, я немного удивлен тем, что, поскольку языки, к которым я больше привык (например, Python, С#), не нуждаются в различии. В частности, на исходном уровне, по крайней мере, компилятор С# преобразует его в нечто вроде func.invoke()
.
Единственная проблема, я вижу, это означает, что мы не могли бы назвать глобальную функцию test-func
больше, потому что она будет затенена, но это вряд ли проблема.