You forgot hash table and regular expression literals.
It looks like Racket nerfed the shared-structure / "Datum Labels" for circular lists and the like (I see it is still in section 2.4 of r7rs):
'#0=(0 . #0#)
(let ((|1 + 2| (+ 1 2))) (display |1 + 2|))
That has been in Racket for a long time.
I tried:
#lang racket/base (let ((a '#0=(0 . #0#))) (display (car a)))
https://onecompiler.com/racket
...and it didn't compile, complaining:
read-syntax: `#...=` forms not enabled for `read-syntax` mode
Yeah, there's a toggle for it in read-syntax mode.
https://docs.racket-lang.org/reference/Reading.html#%28def._...
How do you get that to work?
#lang racket (read-syntax-accept-graph #t) (let ((a '#0=(0 . #0#))) (display (car a)))
I couldn't figure it out with this either:
https://stackoverflow.com/questions/51942188/read-syntax-for...
...just to make sure I wasn't going crazy, this:
(let ((a '#0=(0 . #0#))) (display (car a)))
https://www.jdoodle.com/execute-scheme-online
I am not 100% sure what's going on, but you can use `read` mode this way:
#lang racket (let ((a (read (open-input-string "#0=(0 . #0#)")))) (display (car a)))
It looks like Racket nerfed the shared-structure / "Datum Labels" for circular lists and the like (I see it is still in section 2.4 of r7rs):
...and I should have included `#|block comments|#`, datum `#;comments`, and probably `|symbols with spaces|`.That has been in Racket for a long time.
I tried:
...over athttps://onecompiler.com/racket
...and it didn't compile, complaining:
...maybe there is a switch needed to enable it?Yeah, there's a toggle for it in read-syntax mode.
https://docs.racket-lang.org/reference/Reading.html#%28def._...
How do you get that to work?
...which of course doesn't work, because `(read-syntax-accept-graph)` is a run-time thing, and the circular-list structure is a `read`-time thing.I couldn't figure it out with this either:
https://stackoverflow.com/questions/51942188/read-syntax-for...
...just to make sure I wasn't going crazy, this:
...does work as expected with this online scheme interpreter:https://www.jdoodle.com/execute-scheme-online
I am not 100% sure what's going on, but you can use `read` mode this way:
I think the problem is that `read` / `write` support shared data constructed using `shared`. But programs (read by `read-syntax` are not allow to have cycles.