Почему мы должны использовать funcall
для вызова функций более высокого порядка в Common Lisp? Например, почему мы должны использовать:Зачем нам нужен funcall в Lisp?
(defun foo (test-func args)
(funcall test-func args))
вместо простого:
(defun bar (test-func args)
(test-func args))
Coming из процедурного фона, я немного удивлен тем, что с языками я больше используемый (например, Python, C#), не требует различия. В частности, на исходном уровне, по крайней мере, компилятор C# преобразует его в нечто вроде func.invoke()
.
Единственная проблема, которую я вижу, это то, что это означало бы, что мы больше не могли бы называть глобальную функцию test-func
, потому что она была бы затенена, но это вряд ли проблема.
«Вряд ли проблема» - суть проблемы. На практике мне не сложно вызвать funcall и было бы неудобно, если бы мне пришлось выбирать творческие/странные имена для переменных, чтобы избежать столкновений с CAR, LIST, REST и т. Д. – Xach