<div dir="ltr">I'm trying use local-expand <div><br></div><div>(<a href="http://docs.racket-lang.org/reference/stxtrans.html?q=local-expand&q=local-expand#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29">http://docs.racket-lang.org/reference/stxtrans.html?q=local-expand&q=local-expand#%28def._%28%28quote._~23~25kernel%29._local-expand%29%29</a>)</div>
<div><br><div>to partially expand sub-expressions.  The only expressions I want to expand are known in advance, I'm just having trouble coming up with an elegant recursive algorithm for doing this.<div><br></div><div>
For example:</div><div><br></div><div>(define (pred-a? x) (equal? x "hey"))</div><div>(define (pred-b? y) (equal? y "there"))</div><div>(define other-expr (lambda (z) (or (equal? z "you") (pred-a? z) (pred-b? z)))</div>
<div><br></div><div>I'd like to expand other-expr like so that:</div><div><br></div><div>(expand other-expr) >> (lambda (z) (or (equal? z "you") (equal? z "hey") (equal? z "there"))</div>
<div><br></div><div>local-expand sort of works, but provides either too little expansion (#f stop-ids) whereby only the outer macro is expanded, or else it provides too much expansion (list of stop-ids), whereby "and" and "or" etc is expanded into let-values bindings.</div>
<div><br></div><div>What I'd like is something in between.  Rather than a "stop-list", I want an "include-list".  I don't want or / and to expand to let-values, but I do want any of my special nested expressions (that might be 3 levels deep in an or clause) to expand inside the original or.<br>
</div><div><br></div><div>I figure this is not possible using the built-in functions, and so set out trying to build a recursive function that would reconstruct the expression and selectively expand the inner procedures I wish by applying local-expand to the nested operands.</div>
<div><br></div><div>My question is: </div><div><br></div><div>1.) Is there a simple library way to do this with local-expand that I'm missing?</div><div>2.) Does anyone have a hint or code example to do this manually using recursion?  It should be simple enough but I'm embarrassed to admit how long I've wrestled with it.</div>
<div><br></div><div>Thanks.</div><div><br></div><div>-- <br>Talk to you soon,<br><br>Scott Klarenbach<br><br>PointyHat Software Corp.<br><a href="http://www.pointyhat.ca" target="_blank">www.pointyhat.ca</a><br>p 604-568-4280<br>
e <a href="mailto:scott@pointyhat.ca" target="_blank">scott@pointyhat.ca</a><br><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">200-1575 W. Georgia</span><br>
Vancouver, BC <span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">V6G2V3</span><br><br>_______________________________________<br>To iterate is human; to recur, divine
</div></div></div></div>