over time scheme has been extended with various inconsistent read-syntax forms which became part of the official standard or a quasi-standard in implementations. these read-syntax forms differ from other syntax in that they are not based on round bracket delimited expressions and break the regularity of the fundamental bracket syntax, and that they necessitate extra complexity in the parser, which is usually a non-scheme, or at least scheme independent, part of the implementation. read-syntax is otherwise of concern with serialisation to avoid additional deserialisation processing. efforts to introduce new read-syntax seem typically guided by an interest to decrease typing effort for specific constructs, with at the same time inadvertently increasing the amount of different semantic patterns and permutations, or for giving in to personal habit, or following the notion that it would be better if scheme would be more like other popular languages - as if there were not enough alternatives that already share similar non-scheme syntax, or also, that a language need to be made especially comfortable for users of other-languages or that the current in-language possibilities were insufficient. with syntax, details that may seem like nitpicks matter - single characters are important - a single character can break a program. specific combinations of them carry the semantics, are repeated with everything they encode, read, written and in the mind frequently. imagine for example the difference it would make to have to prefix every variable with a dollar sign.
the following describes a small number of reductions and renamings in an attempt to simplify things and is still completely compatible with current interpreters
#F #T square-bracket-sexp [ ] scsh-block-comment #! !# srfi30-block-comment #| |# upper-case-symbol ' , #' #, {backtick} multiple-return-values
#! hash-bang
(let (name value) body ...) for single bindings
[(lambda (a b) (+ a b))] ((lambda (a b) (+ a b)))
my guess is that the real reason for adding them is rooted in a mistake, because it goes so much against the general simplicity style of schemes design. or it might be about increasing the number of possible permutations to make the view of code more entertaining
not needed
hash-bang: seems necessary for creating shell executable scripts. this format is the standard for shell executable scripts which are important because they allow scheme programs to be used as simple commands on most systems. the syntax is one line starting with #!
a few names have been changed for increased clarity. it should be the goal of a language to have a consistent naming scheme with regular plain english names, not abbreviations, that make it easy to understand what they mean, and to use new terms only if it is absolutely necessary, and be able to improve
'test (q test) '(a b c) (q (a b c)) (map (lambda (e) (+ 1 e)) mylist) (map (l (e) (+ 1 e)) mylist)
this is optional, the original "for-each" might actually be the better name. each is shorter for bindings like each-integer
for single bindings instead of
let ((testname testvalue))
the following can be used
let (testname testvalue)
as of yet i have not found any kind of conflict yet. it works well, making the code simpler