This seems to work (blind hack), I really don&#39;t know what syntax-local-make-definition-context and syntax-local-bind-syntaxes does <div>I can only assume that they introduce some kind of bindings in particular context.</div>
<div><br><div><br></div><div><div>(define-syntax (depgraph stx)</div><div>  (syntax-parse stx</div><div>    [(_ ((id:id expr:expr ...) ...))</div><div>     </div><div>     (define id-lst (syntax-&gt;list #&#39;(id ...)))</div>
<div>     (define ctx (syntax-local-make-definition-context))</div><div>     (syntax-local-bind-syntaxes id-lst #f ctx)</div><div>     (with-syntax ([p #&#39;((lambda () expr ...) ...)])</div><div>       (define p-lst (syntax-&gt;list #&#39;p))</div>
<div>       (define vars</div><div>         (map (lambda (e) </div><div>                (free-vars</div><div>                 (local-expand e &#39;expression &#39;() ctx))) p-lst))</div><div>       (with-syntax ([((f ...) ...) vars])</div>
<div>         #&#39;&#39;((id (f ...)) ...)))]))</div><div>       </div><div>     </div><div>(define simple-arith</div><div> (depgraph</div><div>  ((a #f)</div><div>   (b (* 3 a))</div><div>   (c (+ 5 a b))</div><div>   (d (let ((a 9)) (- c a))) )))</div>
<div><br></div><div>simple-arith </div><div>;((a ()) (b (a)) (c (b a)) (d (c)))</div><div><br></div><br><br><div class="gmail_quote">On Wed, Jan 18, 2012 at 1:46 PM, Marijn <span dir="ltr">&lt;<a href="mailto:hkBst@gentoo.org">hkBst@gentoo.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<br>
<br>
</div><div class="im">On 17-01-12 16:14, Sam Tobin-Hochstadt wrote:<br>
&gt; On Tue, Jan 17, 2012 at 4:06 AM, Marijn &lt;<a href="mailto:hkBst@gentoo.org">hkBst@gentoo.org</a>&gt; wrote:<br>
&gt;&gt; On 16-01-12 15:28, Sam Tobin-Hochstadt wrote:<br>
&gt;&gt;&gt; On Mon, Jan 16, 2012 at 7:57 AM, Marijn &lt;<a href="mailto:hkBst@gentoo.org">hkBst@gentoo.org</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ((_ ((id rule) ...)) (with-syntax (((dep ...) (free-vars<br>
&gt;&gt;&gt;&gt; (expand #&#39;(rule ...)))))<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; You need to use `local-expand&#39;, not `expand&#39;, here.  Probably<br>
&gt;&gt;&gt; like this:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; (local-expand #&#39;(rule ...) &#39;expression &#39;())<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; If I use that instead I still get the same error. Perhaps it<br>
&gt;&gt; needs to be something like:<br>
&gt;&gt;<br>
&gt;&gt; (local-expand #&#39;(rule ...) &#39;expression &#39;(id ...))<br>
&gt;&gt;<br>
&gt;&gt; but &#39;(id ...) is not in the right form...<br>
&gt;<br>
&gt; Ah, I see the problem.  You&#39;re trying to expand expressions with<br>
&gt; unbound variables, and they give an expansion error as they<br>
&gt; should. You might be able to use the stop list to make this work,<br>
&gt; but the right solution is to bind the variables.<br>
<br>
</div>I don&#39;t understand how or where I should bind these identifiers that<br>
I&#39;m trying to detect are free. A working example of how to use<br>
free-vars would really help.<br>
<div class="im"><br>
Marijn<br>
-----BEGIN PGP SIGNATURE-----<br>
Version: GnuPG v2.0.18 (GNU/Linux)<br>
Comment: Using GnuPG with Mozilla - <a href="http://enigmail.mozdev.org/" target="_blank">http://enigmail.mozdev.org/</a><br>
<br>
</div>iEYEARECAAYFAk8Wf/gACgkQp/VmCx0OL2xItQCcDVKB+NzajXbsjg9JfIoUZvSP<br>
PG4An0aV6d4XuZeBQNQqj+rtNnx6yCuz<br>
=0a9B<br>
-----END PGP SIGNATURE-----<br>
<div class="HOEnZb"><div class="h5">____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br></div></div>