Hi tomás, <to...@tuxteam.de> wrote:
> So the best thing for one's brain is to train it to read #(...) > as some weird relative of '(...)? Yes. They are both literals, and no part of a literal is evaluated. #(...) is actually a shorthand for '#(...), and incidentally, one which was not standardized until the R7RS. In portable R[3456]RS code, you must explicitly quote vector literals. It's important to distinguish between an expression and the value(s) it evaluates to. It's easy to confuse them in Scheme, where every expression is a value, but not necessarily the same value that it evaluates to. For example, the expression (+ 1 1) is a list of length 3 which evaluates to the number 2. Similarly, 'A1, which is a shorthand for (quote A1), is a list of two symbols which evaluates to the symbol A1. Only the "self-evaluating" values evaluate to themselves. In general, you should not put a quote (') anywhere that you could not write (+ 1 1) in place of 2, unless of course you *want* a list starting with the symbol 'quote'. > Is there a corresponding weird relative of `(...)? Yes. Remember that #(...) is a shorthand for '#(...). You can replace the "'" with "`", just as you would for a quasiquoted list. For example: scheme@(guile-user)> `#(1 2 3) $1 = #(1 2 3) scheme@(guile-user)> `#(1 ,(+ 1 1) 3) $2 = #(1 2 3) scheme@(guile-user)> `#(1 (+ 1 1) 3) $3 = #(1 (+ 1 1) 3) Regards, Mark