Estoy leyendo SICP recientemente para aprender la programación de lisp.
Hay un ejemplo en el libro para hacer una suma de funciones de alto nivel como se muestra a continuación.
(define (sum term a next b)
...
(term a)
...
(next a)
...
En esta función, term y next son funciones.
Quiero escribir la misma función en elisp así.
(defun sum (term a next b)
....
(funcall term a)
...
(func next a)
....
Luego defino algunas funciones de prueba para probar la suma
(defun inc-test (x) (+ x 1))
sum inc-test 1 inc-test 10
pero muestra errores como este: Función no válida: inc-test
Como soy nuevo en Elisp, ¿alguien puede llamar para decirme cómo solucionarlo? muy apreciado
sum
?inc-test
en su último ejemplo se usa como una variable, pero no se define como una variable (es una función). Debe pasar un símbolo o una referencia de función afuncall
. Por lo tanto, una forma de arreglar su código es pasarlo en'inc-test
lugar deinc-test
(tenga en cuenta la cita).Respuestas:
Para recapitular lo que está en los comentarios, entre
funcall
comillas su argumento (simplemente accediendo al argumento). Y antes de eso, también debemos asegurarnos de no intentar evaluar o acceder al valor del parámetro de nombre de función que se pasa en la llamada a la función.Por lo tanto, una respuesta aceptable parece ser:
O básicamente llamar con
'inc-test
o en(quote inctest)
lugar deinc-test
.fuente