Questa definizione ricorsiva di una macro fa quello che dovrebbe (interi somma da 1 a n):Come ricorsive definizioni di macro vengono valutati
(defmacro sum-int-seq (n)
`(cond
((equal 0 ,n) 0)
(t (+ ,n (sum-int-seq (- ,n 1))))))
Per esempio (sum-int-seq 5)
dà 15.
Ma perché lo fa lavoro? Quando la macro viene espansa ottengo questo:
(macroexpand '(sum-int-seq 5))
(IF (EQUAL 0 5) 0 (+ 5 (SUM-INT-SEQ (- 5 1))))
Ma poiché somma-int-Seq è una macro valutazione macro dovrebbe diventare un ciclo infinito. Il compilatore crea invece una funzione ricorsiva? Se questa definizione crea una funzione ricorsiva esiste un modo per definire le macro in maniera ricorsiva?
(Questo è un esempio stupido per brevità, una funzione sarebbe ovviamente lavorare meglio per questo)
Wow, grazie per una risposta esauriente. – snowape