Esta definición recursiva de una macro hace lo que debe (suma enteros de 1 a N):¿Cómo se evalúan las definiciones de macros recursivas
(defmacro sum-int-seq (n)
`(cond
((equal 0 ,n) 0)
(t (+ ,n (sum-int-seq (- ,n 1))))))
Por ejemplo (sum-int-seq 5)
da 15.
Pero ¿por qué lo hace ¿trabajo? Cuando la macro se expandió me sale esto:
(macroexpand '(sum-int-seq 5))
(IF (EQUAL 0 5) 0 (+ 5 (SUM-INT-SEQ (- 5 1))))
Pero debido suma-int-ss es una macro macro la evaluación debe convertirse en un bucle infinito. ¿El compilador crea una función recursiva en su lugar? Si esta definición crea una función recursiva, ¿hay alguna manera de definir macros recursivamente?
(Este es un ejemplo tonto en aras de la brevedad, una función sería, por supuesto funcionar mejor para esto)
Wow, gracias por una respuesta completa. – snowape