Re: Keyword arguments in procedures specified in SRFIs Lassi Kortela 24 Jul 2019 12:11 UTC
> are there other differences > between interned and uninterned symbols than comparing inequal > > That's the sole purpose. In the Scheme world it can be solved by > hygienc macros. However, if you want to dump the generated code and > read it back, a symbol that guaranteed no name conflict comes handy. I think I misunderstand what you're saying. How do you write some code that uses gensyms, and then read it back while keeping multiple references to the same gensyms? I tried the following test in Gauche: (let* ((s (let ((port (open-output-string))) (write (gensym) port) (get-output-string port))) (g1 (read (open-input-string s))) (g2 (read (open-input-string s)))) (list s g1 g2 (eq? g1 g1) (eq? g2 g2) (eq? g1 g2))) ;; => ("#:G100" #:G100 #:G100 #t #t #f) (let* ((s (let ((port (open-output-string))) (let ((g (gensym))) (write (cons g g) port)) (get-output-string port))) (gs (read (open-input-string s)))) (list s gs (eq? (car gs) (cdr gs)))) ;; => ("(#:G101 . #:G101)" (#:G101 . #:G101) #f) According to these tests, an uninterned symbol read from a port is never equal to another uninterned symbol with the same name, even if the references are embedded in the same data structure (here, a cons cell).