4 ms·
When lispers talk about lists, they are usually speaking about a very specific type of data structure - a linked list of cons cells[0]. Clojure's lists are not
by robto 3y ago
When lispers talk about lists, they are usually speaking about a very specific type of data structure - a linked list of cons cells[0]. Clojure's lists are not actual chains of cons, they are immutable hash array map tries. This means that Common Lisp code can't interoperate with Clojure code.
The precise/pedantic lisper may insist that since Lisp stands for List Processing and Lists are chains of cons cells and since Clojure doesn't have cons cells for the built-in lists, then Clojure is not a Lisp.
If, however, you view lisp (lower case) as a family of homo-iconic languages that use s-expressions, then Clojure happily fits under that umbrella.
The trick is to pay close attention to whether the person is talking about a Lisp (ANSI Common Lisp implementation) or a lisp (the family). Sometimes people say "lisp" when they are talking about "Lisp", which can cause some confusion.
[0]https://en.wikipedia.org/wiki/Cons https://en.wikipedia.org/wiki/Cons
- wtetzner 3y agoClojure's lists are effectively cons cells. Clojure's vectors and maps are immutable hash array map tries. => (class (read-string "(some list)")) clojure.lang.PersistentList They are written in Java, and implement a bunch of interfaces, so the implementation looks complicated, but they are basically just classes with _first and _rest fields. https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentList.java#L20 https://github.com/clojure/clojure/blob/master/src/jvm/cloju...