Just a quick try not using @-exps. Does something like this look good?<br><br>#lang scheme<br><br>(define (py-format str couples)<br>  (regexp-replace*<br>   &quot;~&lt;([^&gt;]*)&gt;([aAsSvVeEcCbBoOxX])&quot;<br>   str<br>

   (lambda(all key str-format)<br>     (let ([key-val (assoc key couples)])<br>       (if key-val<br>           (format (string-append &quot;~&quot; str-format) (second key-val))<br>           (error &quot;Key not found in py-format: &quot; key))))))<br>

<br>(py-format &quot;~&lt;x&gt;a ~&lt;y&gt;a ~&lt;z&gt;s&quot; <br>           &#39;((&quot;x&quot; &quot;ola&quot;)<br>             (&quot;y&quot; (hey &quot;hey&quot;))<br>             (&quot;z&quot; &quot;salute&quot;)))<br>

<br>; &quot;ola (hey hey) \&quot;salute\&quot;&quot;<br><br><br><br><div class="gmail_quote">On Wed, Feb 10, 2010 at 17:10, Todd O&#39;Bryan <span dir="ltr">&lt;<a href="mailto:toddobryan@gmail.com">toddobryan@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">On Tue, Feb 9, 2010 at 10:40 PM, Eli Barzilay &lt;<a href="mailto:eli@barzilay.org">eli@barzilay.org</a>&gt; wrote:<br>


&gt;<br>
&gt; Basic output:<br>
&gt;<br>
&gt;  #lang at-exp scheme<br>
&gt;  (require scribble/text)<br>
&gt;  (define foo &quot;FOO&quot;)<br>
&gt;  (define bar &quot;BAR&quot;)<br>
&gt;  (output @list{@foo and @bar})<br>
&gt;<br>
&gt; (It&#39;s easy to make it return a string instead, I just didn&#39;t provide<br>
&gt; another function (or a keyword argument or something) because there<br>
&gt; was no need and I didn&#39;t see any interface that was obviously better.)<br>
&gt;<br>
&gt; This is using the same functionality that the web server templates are<br>
&gt; using, but you don&#39;t need the extra overhead of using the web server<br>
&gt; or separate files.  Here&#39;s how you&#39;d do it:<br>
&gt;<br>
&gt;  #lang scribble/text<br>
&gt;  @(define foo &quot;FOO&quot;)<br>
&gt;  @(define bar &quot;BAR&quot;)<br>
&gt;  @foo and @bar<br>
&gt;  @(define (choose x y) @list{@x before @y or @y before @|x|?})<br>
&gt;  @choose[foo bar]<br>
&gt;<br>
<br>
</div>The nice thing about the Python version is that you can just have a<br>
string with placeholders for values you&#39;re going to include later. Am<br>
I correct that I really need to write a function (like choose above)<br>
that expects the values I want to go into the string so that the<br>
@-exprs don&#39;t get evaluated before they have values?<br>
<br>
Obviously, that&#39;s not much more difficult, but my brain just didn&#39;t go<br>
there automatically. Clearly, I need to spend more time programming in<br>
Scheme. :-)<br>
<font color="#888888"><br>
Todd<br>
</font><div><div></div><div class="h5">_________________________________________________<br>
  For list-related administrative tasks:<br>
  <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme" target="_blank">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>
</div></div></blockquote></div><br>