Perché dobbiamo usare funcall
per chiamare le funzioni di ordine superiore in Common Lisp? Per esempio, perché dobbiamo usare:Perché abbiamo bisogno di funcall in Lisp?
(defun foo (test-func args)
(funcall test-func args))
invece del più semplice:
(defun bar (test-func args)
(test-func args))
Venendo da un contesto procedurale, io sono un po 'sorpreso da questo dato che le lingue sono più usato (ad es. Python, C#) non ha bisogno della distinzione. In particolare, almeno al livello sorgente, il compilatore C# lo trasforma in qualcosa come func.invoke()
.
L'unico problema che vedo è che ciò significherebbe che non potremmo chiamare più una funzione globale test-func
perché sarebbe ombreggiata, ma questo non rappresenta un problema.
"Difficilmente un problema" è il nocciolo della questione. In pratica, trovo difficilmente un problema chiamare funcall e sarei disturbato se dovessi scegliere nomi creativi/strani per variabili per evitare scontri con CAR, LIST, REST, ecc. – Xach