Re: Keyword arguments in procedures specified in SRFIs Lassi Kortela 24 Jul 2019 13:42 UTC

> The #: prefix was chosen due to prior art (Common Lisp).  It makes sense to preserve the compatibility for
>
> - programmers with prior experience with CL
> - prior documentation, manuals and books on CL
> - interoperability with CL (write a datum from CL and read it from Gambit, and vice-versa)
> - past ~10 years of use by Gambit users

Shiro and I also prefer CL-compatible syntax but my reading is that it's
more controversial in this discussion than using #: for keywords. That's
why I was trying to explore alternatives. Though if you side with CL'ish
syntax for keywords as well, the debate is split about even :)

> By the way, the eq-ness in a datum can be preserved with write-shared…
>
>    > (let ((a (string->uninterned-symbol "foo"))
>            (b (string->uninterned-symbol "foo")))
>        (write-shared (list a b b))
>        (newline))
>    (#:foo #0=#:foo #0#)

Cool! I had no idea there are separate write and write-shared
procedures. write-shared is standardized in R7RS even. The approach of
re-using the generic shared-structure marker syntax makes sense.

Apparently Common Lisp uses the same approach when you bind
*print-readably* to true:

(let ((*print-readably* t)) (let ((g (gensym))) (write (cons g g))))

writes:

(#1=#:|G2814| . #1#)