¿Por qué tenemos que usar funcall
para llamar a funciones de orden superior en Common Lisp? Por ejemplo, ¿por qué tenemos que utilizar:¿Por qué necesitamos funcall en Lisp?
(defun foo (test-func args)
(funcall test-func args))
en lugar de la más simple:
(defun bar (test-func args)
(test-func args))
Viniendo de un fondo de procedimiento, estoy un poco sorprendido por que desde las lenguas que estoy más solía (por ejemplo, Python, C#) no necesita la distinción. En particular, al menos en el nivel de la fuente, el compilador de C# lo transforma en algo como func.invoke()
.
El único problema que veo es que esto significaría que ya no podríamos llamar a una función global test-func
porque estaría sombreada, pero eso no es un problema.
"No hay problema" es el quid de la cuestión. En la práctica, creo que no es un problema llamar a funcall y sería un inconveniente si tuviera que elegir nombres creativos/extraños para las variables para evitar choques con CAR, LIST, REST, etc. – Xach