I agree with David when he says that this is not really relevant.   As
a relative newbie to Lisps I have found that Clojure, while very Lispy
in so many ways, is actually more different than I initially thought.
It is really a hybrid of many languages wrapped in s expressions,
which is what makes it so cool!


On Jun 24, 9:29 pm, David Sletten <da...@bosatsu.net> wrote:
> On Jun 24, 2011, at 7:35 PM, Tim Robinson wrote:
>
> > I'm under the impression that traditional lisps have a greater
> > distinction between a cons operation vs. a list operation.
> > Specifically I had believed that consing was a more efficient and
> > better performing operation than using list.
>
> This is not true, but it is also not relevant. In historical Lisps, the list 
> datatype is a singly-linked list consisting of nodes known as CONS cells. In 
> Common Lisp, for example, the predicate (listp obj) is simply equivalent to 
> the test (typep obj '(or cons null)). A list is either a (chain of) CONS or 
> the empty list. Notice that this implicitly includes "improper" lists (dotted 
> pairs) such as (cons 1 2). In Clojure, on the other hand, it is illegal for 
> the second argument to 'cons' to be an atom:
> (cons 1 2) =>
> java.lang.IllegalArgumentException: Don't know how to create ISeq from: 
> java.lang.Integer
>
> A Lisp form such as (list 1 2 3) is just a series of calls to cons: (cons 1 
> (cons 2 (cons 3 '()))).
>
> > Is this true? and if so, given both the Cons and Lists are actually
> > both just seqs in Clojure, does the above statement still hold true in
> > the Clojure world?
>
> As I mentioned, the correspondence between LIST and CONS in traditional Lisps 
> is not really relevant in Clojure, where the emphasis is on the sequence 
> abstraction. A sequence simply satisfies an interface that provides a 'first' 
> element, the 'rest' of the sequence, and allows you to construct ('cons') a 
> new sequence from an existing one. Lists and vectors are two concrete 
> sequence types, and they have significant differences in terms of behavior 
> and performance. But in Clojure you can 'cons' using a list or a vector. So 
> the rules are a little different from other Lisps.
>
> Have all good days,
> David Sletten

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to