Can someone explain why Scheme's keywords have the hash: #:keyword instead of just :keyword like in Common Lisp and Elisp.

https://stackoverflow.com/questions/4873810/what-does-mean-in-lisp

Found some explanation here for Common Lisp's usage of # here.

Also, there is #t, #true, #false, #f, and so on.

#scheme #guile #emacs #commonlisp #lisp #elisp #emacslisp

What does # mean in LISP

For example, #'functionname, is it necessary?

Stack Overflow

@tusharhero Guile (1993, but when keywords???) notably does that for backwards-compatability with R5RS (2006) when parsing `:keyword`, but Scheme implementations vary, and Guile itself can be configured to use `:keyword` (previously(?) seen in SRFI-88) and `keyword:` (preceeded by SRFI-89), which *do* have documented rationals but *don't* have hashes.

i think they're cozy

@antlers I am trying to convince my friend to not switch to :keyword for their emacs-like editor but in guile scheme.

They think it looks noisy, so I need more ammunition to convince them.

@tusharhero Scheme is a Lisp-1 (single namespace for identifiers), and ":" can be used in identifiers, so ":keyword" could identify a variable or function (r6rs)

@tusharhero from what I can find, the convention for scheme might have started with PLT scheme (racket) and adopted by other scheme implementations. Interestingly keywords were not a thing in the RnRS until R7RS-large (partial support in R6RS).

Not sure about common lisp.

@tusharhero Common Lisp has namespaces (called "packages") for symbols. KEYWORD::HELLO is the symbol named HELLO in the package KEYWORD. There is an appreviation for this keyword package in the s-expression reader -> :HELLO is a shorter way to write KEYWORD::HELLO . The colon(s) separates the package name from the symbol name. In Common Lisp #:HELLO has the mean of a symbol, which is not interned in any package (-> namespace).