Sysop: | Amessyroom |
---|---|
Location: | Fayetteville, NC |
Users: | 40 |
Nodes: | 6 (0 / 6) |
Uptime: | 10:24:47 |
Calls: | 291 |
Files: | 910 |
Messages: | 76,423 |
(defmacro sum (expression index initial condition)
;; Sum $expression$ for $index$ = $initial$ and successive integers,
;; as long as $condition$ holds.
(let ((temp (gensym)))
`(do ((,temp 0 (+ ,temp ,expression))
(,index ,initial (1+ ,index)))
((not ,condition) ,temp))))
The main error with this macro is that it does something you could do
with the standard LOOP. I.e. instead of debugging this macro, you could
be working on the program where this macro is intended to be used:
(loop for x from 1 while (< x 6) summing x)
15
KK wrote:
(defmacro sum (expression index initial condition)
;; Sum $expression$ for $index$ = $initial$ and successive integers,
;; as long as $condition$ holds.
(let ((temp (gensym)))
`(do ((,temp 0 (+ ,temp ,expression))
(,index ,initial (1+ ,index)))
((not ,condition) ,temp))))
The main error with this macro is that it does something you could do
with the standard LOOP. I.e. instead of debugging this macro, you could
be working on the program where this macro is intended to be used:
(loop for x from 1 while (< x 6) summing x) --> 15
Gauche Scheme
(use srfi-42) ;; sum-ec
(sum-ec (:range x 1 6) x) ===> 15