You forgot hash table and regular expression literals.
'#0=(0 . #0#)
...and I should have included `#|block comments|#`, datum `#;comments`, and probably `|symbols with spaces|`. (let ((|1 + 2| (+ 1 2)))
(display |1 + 2|)) #lang racket/base
(let ((a '#0=(0 . #0#)))
(display (car a)))
...over athttps://onecompiler.com/racket
...and it didn't compile, complaining:
read-syntax: `#...=` forms not enabled for `read-syntax` mode
...maybe there is a switch needed to enable it? #lang racket
(let ((a (read (open-input-string "#0=(0 . #0#)"))))
(display (car a)))
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.https://docs.racket-lang.org/reference/Reading.html#%28def._...
#lang racket
(read-syntax-accept-graph #t)
(let ((a '#0=(0 . #0#)))
(display (car a)))
...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:
(let ((a '#0=(0 . #0#)))
(display (car a)))
...does work as expected with this online scheme interpreter:That read-syntax doesn't just accept everything accepted by plain read is one of my biggest annoyances with Racket.