|
|
|
|
|
by dan-robertson
2710 days ago
|
|
Well most closure syntax is pretty similar: change commas to whitespace, add delimited readers for [ and {. The hard parts are I think: 1. Package/namespace differences as CL has top level packages and clojure has nested packages. In CL keywords are symbols in the keyword package but in clojure they are symbols starting with a colon in any package. 2. Using e.g. {} or :for as a function 3. Different object systems. |
|
Symbols in CL are totally different. There are escape characters and symbols can have different characters in their names. Symbols can start with numeric characters. / and . have no special meaning in CL. Keywords in CL don't need to start with : . If we want to read a Clojure keyword, one probably don't want to read a CL keyword, but a different data type.
Lists in CL don't exist. Instead we have cons cells with dot notation and list-like notation optimization. ( a b . nil) = (a b) = (a . (b . nil)), (a b . c). In Clojure there are no cons cells in the syntax. If you read (a . b) with the CL reader, then it is a cons cell, in Clojure it would be some kind of list with three elements. If you read (a b .) in CL, then one gets a reader error. Clojure does not care. (a . (b . nil)) in CL are two cons cells which form a single list, in Clojure it would be two nested lists.
CL has different numeric syntax. CL has various other notation for arrays, structures, bitvectors, ...
CL has no metadata. CL has different backquote syntax.
If one implements the Clojure reader stuff in
https://clojure.org/reference/reader#_reader_forms
one might as well implement the reader from scratch.