宏的這種遞歸定義做什麼它應該(和整數從1到n):如何遞歸宏定義得到評估
(defmacro sum-int-seq (n)
`(cond
((equal 0 ,n) 0)
(t (+ ,n (sum-int-seq (- ,n 1))))))
例如(sum-int-seq 5)
給15
但是爲什麼它工作?當宏得到擴展我得到這個:
(macroexpand '(sum-int-seq 5))
(IF (EQUAL 0 5) 0 (+ 5 (SUM-INT-SEQ (- 5 1))))
但是,因爲sum-int-seq是一個宏,宏評估應該成爲一個無限循環。編譯器是否會創建一個遞歸函數?如果這個定義創建了一個遞歸函數,還有什麼辦法可以遞歸地定義宏?
(這是爲簡明起見傻例如,函數當然會爲這個工作得更好)
哇,謝謝你的詳細解答。 – snowape