estoy tratando de escribir algo de mi primer código en Emacs Lisp y no puedo entender el comportamiento siguienteOrden de Evaluación en Emacs Lisp
(defun sq (x) (* x x))
(member 9 '(1 2 3 4 (sq 3)))
Esto se evalúa como nil
pero el valor que estaba esperando era (9)
Ahora supongo que * emacs lisp usa la evaluación de solicitud de pedido, entonces, ¿por qué no se evaluó la lista antes de aplicar la función?
Ya que necesitaba sólo para probar una condición no nulo, por fin pude hacer que funcione de la siguiente manera,
(member 9 (cons (sq 3) '(1 2 3 4)))
que evalúa a (9 1 2 3 4)
Mi pregunta es ¿Esto funciona porque (sq 3)
es un argumento "directo" a una función (contras) a diferencia del ejemplo anterior donde era un elemento dentro de un argumento? ¿Está utilizando cons
una solución aceptable aquí o existe una forma mejor/correcta de obtener el comportamiento deseado?
* Si bien no pude averiguar con certeza qué orden de evaluación usa emacs lisp, probé la misma expresión en el intérprete de esquemas y obtuve la misma respuesta y desde el SICP sé que el esquema usa evaluación de orden aplicativa. ¡Ahora estoy realmente confundido!
Cualquier ayuda apreciada.
Muchas gracias. Eso fue útil :) – naiquevin
@naiquevin, mi placer. –