Hi all - <br><br>what&#39;s the way to implement a return (or break) control from a infinite while loop (i.e. (while true ...))? <br><br>A while loop with a test condition is straight forward, but I cannot figure out how to return from an infinite loop. My thought is to introduce a hidden conditional, and then having the inner return macro to set the condition to be true, but having the two macros being separate basically means the return macro&#39;s hidden variable is different from the hidden variable in while loop, so obviously my approach is incorrect. <br>
<br>Below is what I have.&nbsp; Thanks in advance for suggestions, <br>yc <br><br>(define-syntax (return stx) <br>&nbsp; (syntax-case stx ()<br>&nbsp;&nbsp;&nbsp; ((_ exp)<br>&nbsp;&nbsp;&nbsp;&nbsp; #&#39;(begin <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! __ret__ #t)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exp))))<br>
<br>(define-syntax (while stx)<br>&nbsp; (syntax-case stx (true)<br>&nbsp;&nbsp;&nbsp; ((_ test exp ...)<br>&nbsp;&nbsp;&nbsp;&nbsp; #&#39; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let loop ((__ret__ #f)) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond (test exp ... (loop __ret__)))))<br>&nbsp;&nbsp;&nbsp; ((_ true exp ...) ;;; this is *incorrect*... <br>
&nbsp;&nbsp;&nbsp;&nbsp; #&#39;(_ (= __ret__ #f) exp ...))))<br><br>(let ((i 0))<br>&nbsp;&nbsp;&nbsp; (while true <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display i) (newline)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (&lt; i 10)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! i (+ i 1))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (return i))))<br>;; =&gt; set!: cannot set undefined identifier: __ret__<br>
<br><br><br>