[racket] Racketrivia: Using ' as an identifier suffix
You are being so terribly tricked by the reader here.
x followed by ' is never an identifer.
(define x' 42)
is the same as
(define x '42)
which is the same as
(define x 42)
But then the terribleness comes in.
x'
reads a "x" followed by an unfinished expression. So when you do:
> x'
42
and then the next thing you type is going to be quoted.
Welcome to Racket v6.1.1.6.
> (define x 1)
> x'
1
> quoteme
'quoteme
Robby
On Thu, Jan 8, 2015 at 2:15 PM, Greg Hendershott
<greghendershott at gmail.com> wrote:
> So Haskell conventionally uses ' as a suffix, prime. From what I've
> seen, Scheme and Racket tend to use * instead.
>
> At some point I "learned" that you cannot use ' as a suffix in Racket.
>
> Today I tried again, and was surprised to see that it works... somewhat.
>
> $ racket
> Welcome to Racket v6.1.1.6.
> -> (define x' 42)
> -> x'
> 42
> -> (+ x' 10)
> '(+ x '10)
> -> (+ 10 x')
> ; readline-input:4:8: read: unexpected `)'
> -> (+ 10 x' )
> ; readline-input:5:8: read: unexpected `)'
>
>
> 0. It turns out x' _is_ a valid identifier, and it self-evaluates just
> fine. Interesting.
>
> 1. I don't understand why (+ x' 10) evaluates not to 52, and not even
> an error, but... '(+ x '10). WAT.
>
> 2. Less surprising to me is that (+ 10 x') and even (+ 10 x' ) are
> errors. But actually, I wonder why the reader (or lexer?) couldn't
> handle ' followed by a character that can't be part of an identifier?
>
>
> p.s. I'm not proposing this would be a great suffix style to use.
> Quick, distinguish x' from 'x ! And don't type one when you mean the
> other! I get that. Even so, I'm curious.
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users