Path: ...!weretis.net!feeder9.news.weretis.net!news.nk.ca!rocksolid2!i2pn2.org!.POSTED!not-for-mail From: HenHanna Newsgroups: comp.lang.lisp,comp.lang.scheme Subject: Re: What's the error in this =?UTF-8?B?bWFjcm8/?= Date: Tue, 24 Sep 2024 00:49:20 +0000 Organization: novaBBS Message-ID: <30b4599472c7cfb8b8e5b278bba46e0e@www.novabbs.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Info: i2pn2.org; logging-data="3219383"; mail-complaints-to="usenet@i2pn2.org"; posting-account="25PjXUQKTQXKZnoxTqVufZcfCkmLjnu8AjjfHtuMysE"; User-Agent: Rocksolid Light X-Spam-Checker-Version: SpamAssassin 4.0.0 X-Face: P#KeQ)CUdd!==@fw~Ms1=,Hb`IWtb6:Mw)x3B=H1BfNC\lz?Nb&)M9}$>?'X7l;CuB}utlJ=PHsRBSG6X>dYZ$[>P]$~+`>@V6$t}hTLoQ7XC~W\>:`B3ALU]SH;d(\MEc}znW8m}-ma&yPFkJ2@KSQrz=!Y;><;6a>z6N+mt`ClCt.PAE 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)))) This looks good to me... Was this the corrected version? >> >> 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 In Scheme and Gauche Scheme, do ppl use Gensym? (define-macro (Sum expression index initial condition) `(do ((%Sum 0 (+ %Sum ,expression)) (,index ,initial (+ 1 ,index))) ((not ,condition) %Sum))) (print (macroexpand '(Sum x x 1 (< x 6)))) (print (Sum x x 1 (< x 6)))