<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; ">I'm looking at some old Scheme code and find that the code still works under (#lang racket) but trace is unhappy with &nbsp;the use of set! in the traced function.</div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><br></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">set!: cannot modify a constant: next-leaf-generator</font><br></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><br></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; ">&nbsp;I also tried (#lang r5rs) but &nbsp;it's unhappy with my require.</div><div style="font-family: 'times new roman', 'new york', times,
 serif; font-size: 12pt; "><br></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; ">(require racket/trace) =&gt; <span class="Apple-style-span" style="font-size: medium; ">expand: unbound identifier in module in: require</span></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><br></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; ">What #lang/require must I use to work around this?<br></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><br></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; ">Michael</div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><br></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; ">==========</div><div style="font-family: 'times new
 roman', 'new york', times, serif; font-size: 12pt; "><br></div><div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">#lang racket</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif"><br></font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">(require racket/trace)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif"><br></font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">(define next-leaf-generator</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; (λ (obj eot)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; (letrec ((return #f)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york',
 times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(cont (λ (x)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(recur obj)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(set! cont (λ (x) (return eot)))</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(cont #f)))</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(recur (λ (obj)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (if (pair? obj)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (for-each recur obj)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (call/cc (λ (c)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(set! cont c)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(return
 obj)))))))</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; (λ () (call/cc (λ (ret)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(set! return ret)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(cont #f)))))))</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif"><br></font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">(define leaf-eq?</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; (λ (x y)</font></div><div><font class="Apple-style-span" face="'times new roman',
 'new york', times, serif">&nbsp; &nbsp; (let* ((eot (list 'eot))</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(xf (next-leaf-generator x eot))</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(yf (next-leaf-generator y eot)))</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; (letrec ((loop (λ (x y)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(cond ((not (eq? x y)) #f)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp;((eq? eot x) #t)</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(else (loop (xf) (yf)))))))</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">&nbsp; &nbsp; &nbsp; &nbsp; (loop (xf) (yf))))))</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif"><br></font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">;&gt; (leaf-eq? '(a (b (c))) '((a) b c))</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">;#t</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">;&gt; (leaf-eq? '(a (b (c))) '((a) b c d))</font></div><div><font class="Apple-style-span" face="'times new roman',
 'new york', times, serif">;#f</font></div><div><font class="Apple-style-span" face="'times new roman', 'new york', times, serif">;&gt;&nbsp;</font></div></div></div></body></html>