Two minutes ago, Jon Rafkind wrote: > > My issue is that first I try @{foo} and get the error "expected a > procedure, given a string". At which point I remember kevin telling > me off-hand how you (eli) had a trick to deal with these situations, > which was to put string-append between the @ and {.
It's not really a trick. What if you want to do something else: (define foo 123) @string-append{blah @foo blah} this reads as (string-append "blah " 123 " blah") Obviously, `list' won't work in all cases too, since you might want a string. Instead, things are kept very simple -- and very *uniform*: both the "command part" (following the `@') and the "datums part" (inside `[]') are put in a list, before the rest of the actual text. Since the command part is optional, you can omit it, but then @{foo bar baz} reads as ("foo bar baz") Another exmaple: @[emph]{blah} reads as (emph "blah") which is the same as @emph{blah} If you want a cheap way to have a list of text, you could use quote (again, uniformity is top priority, which makes these things fall off for free): '{for bar baz} but there's no similar way to get a single string, because of the "interpolation" feature. (Not really interpolation, but close in spirit.) > Could @{ as a special case do string-append for me? BTW, you could still do it in your language: -> ,r scribble/reader -> (read-syntax) @{foo} #<syntax::34 ("foo")> -> (syntax-property ^ 'scribble) '(form #f 1) having a scribble property that starts with `form' identifies a form, and the #f identifies the missing command part. (I don't remember what's 1, but that should be easy to find.) -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users