Зачем нам нужен funcall в Лиспе?

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

18
задан nbro 7 September 2017 в 16:54
поделиться