<div dir="ltr">Thank you Eli that works perfectly. I'm really just playing around getting back into Racket<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Dec 5, 2013 at 5:24 PM, Eli Barzilay <span dir="ltr"><<a href="mailto:eli@barzilay.org" target="_blank">eli@barzilay.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Yesterday, Laurent wrote:<br>
> Or better here: @values{C:\Users\Harry\SANSKRIT\GRETIL<br>
<div class="im">> ALL\adyappu.htm} to avoid the superfluous ~a operation.<br>
<br>
</div>Using `values' is not a good idea since it works only if you don't use<br>
nested @s or newlines.  If these things are included, you'll end up<br>
with a form that is equivalent to (values x y z) and things will<br>
probably break in a confusing way.<br>
<div class="im"><br>
<br>
> I've just surprised myself testing @(...){...} and seeing that it<br>
</div>> works: @(lambda(x)x){C:\Users\Harry\SANSKRIT\GRETIL ALL\adyappu.htm}<br>
<br>
That's intentional, and more than that, any form can be used including<br>
@-forms, which means that to write a function that takes in two blocks<br>
of text you can do something like this:<br>
<br>
    @(define ((foo . text1) . text2) ...stuff...)<br>
<br>
    @@foo{some text}{some more text}<br>
<br>
(This is a simplified example again, where you just get a single<br>
argument, but in the general case you'd have multiple inputs for both<br>
texts.)<br>
<div class="im"><br>
<br>
Yesterday, Harry Spier wrote:<br>
><br>
> 2)<br>
> What am I doing wrong here.  -- everything :-)<br>
> I'm trying to change the command character from @ to #  so that I<br>
> can have raw strings containing both \ and @  looking at the racket<br>
> documentation here:<br>
> <a href="http://docs.racket-lang.org/scribble/reader-internals.html?q=at-exp#" target="_blank">http://docs.racket-lang.org/scribble/reader-internals.html?q=at-exp#</a><br>
> %28def._%28%28lib._scribble%2Freader..rkt%29._make-at-readtable%29%29<br>
</div>> [...]<br>
<br>
It's possible to do that, though you'll need to implement your own<br>
reader.  Not too hard, since the scribble/reader functionality can<br>
build the appropriate table, but two notes before you go that route:<br>
<br>
1. Overriding "#" is a bad idea, since it has special meaning in<br>
   Racket code.  Some obvious examples that you'll lose are boolean<br>
   literals, vector literals, and the convention that "#<" is an<br>
   unreadable value -- a convention that can lead to copy/paste<br>
   surprises if broken.<br>
<br>
2. If you want to include more free-form text, there's a reader<br>
   feature that allows you to use customized tokens:<br>
<br>
     @foo|{ some text including @s }|<br>
<br>
   to use nested forms, you'd need to use "|@".  If that's not enough,<br>
   then you can also include more things between the braces and the<br>
   bars:<br>
<br>
     @foo|==!!=={ even more free text, including @|s etc }==!!|<br>
<div class="im"><br>
<br>
Yesterday, Greg Hendershott wrote:<br>
> I have @~a{} in muscle memory because it's handy for a variety of<br>
> purposes, including as an alternative to format/printf.<br>
><br>
>     #lang at-exp racket<br>
><br>
>     (define x 1)<br>
>     (define y 10)<br>
><br>
>     (format "x is ~a, y is ~a, and x + y is ~a" x y (+ x y))<br>
>     ;; or<br>
>     @~a{x is @x, y is @y, and x + y is @(+ x y)}<br>
><br>
>     ;; both => "x is 1, y is 10, and x + y is 11"<br>
<br>
</div>Allowing such things was very intentional in the design...  The<br>
`scribble/text' language goes further in that it allows many more<br>
things in the contents for printing.  There's no to-string form for it<br>
though, since I wasn't sure that it's a good idea -- mostly because<br>
people would be tempted to do something like<br>
<br>
    (display @to-string{stuff})<br>
<br>
where a long string gets allocated for no good reason.  Using `output'<br>
instead usually looks like this:<br>
<br>
    (output @list{<br>
      anything you want<br>
    })<br>
<br>
since lists are just scanned recursively by `output'.  As a side note,<br>
this use of lists makes some things very convenient -- instead of<br>
tricky code that uses `append-map' or `format's, `string-append's and<br>
`~a's, you just use lists, nesting them as much as you want.<br>
<div class="im"><br>
<br>
> p.s. I believe <a href="http://www.mail-archive.com/users@racket-lang.org/msg07162.html" target="_blank">http://www.mail-archive.com/users@racket-lang.org/msg07162.html</a><br>
> predates `~a` being added to Racket.<br>
<br>
</div>(It does.)<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:<br>
                    <a href="http://barzilay.org/" target="_blank">http://barzilay.org/</a>                   Maze is Life!<br>
</font></span></blockquote></div><br></div>