Making Cons implement IPersistentList will solve all cases except when
list* gets only one argument. This is problematic. The source looks like
this:
(defn list*
"Creates a new list containing the items prepended to the rest, the
last of which will be treated as a sequence."
{:added "1.0"
:static true}
([args] (seq args))
([a args] (cons a args))
([a b args] (cons a (cons b args)))
([a b c args] (cons a (cons b (cons c args))))
([a b c d & more]
(cons a (cons b (cons c (cons d (spread more)))))))
Calling 'seq' in the first case means that with calls like: (list* {:a 1})
we get clojure.lang.PersistentArrayMap$Seq and not a List. In theory, we
could do just (apply list args) here, but apply itself also uses list* in
its implementation. Luckily, it doesn't use the one-argument version of
list*, so we could probably declare 'apply' above the 'list*' in the
'core.clj' source and then use it there... Does it seem reasonably?
Marek
On Thursday, December 27, 2012 3:28:04 AM UTC+1, Tom Jack wrote:
>
> A small bug in ClojureScript was related to this:
> https://github.com/clojure/clojurescript/commit/88b36c177ebd1bb49dbd874a9d13652fd1de4027
>
> It looks like the only thing missing to make Cons implement
> IPersistentList is IPersistentStack. Why not implement it?
>
> On Wednesday, December 26, 2012 4:13:38 PM UTC-6, Ben wrote:
>>
>> On Wed, Dec 26, 2012 at 2:07 PM, Stephen Compall
>> <[email protected]> wrote:
>> > On Wed, 2012-12-26 at 12:35 -0800, Marek Šrank wrote:
>> >> ...however, its docstring says: "Creates a new list containing the
>> items
>> >> prepended to the rest, the last of which will be treated as a
>> sequence."
>> >
>> > List is almost always colloquial, not literally IPersistentList.
>> >
>> > I would be in favor of eliminating list?, really, in favor of
>> > seq?/sequential?/seqable?.
>>
>> Given that lists and (e.g.) vectors behave differently in some
>> circumstances (as the first argument to conj, for instance), it seems
>> desirable to be able to tell what one's got on one's hands.
>>
>> --
>> Ben Wolfson
>> "Human kind has used its intelligence to vary the flavour of drinks,
>> which may be sweet, aromatic, fermented or spirit-based. ... Family
>> and social life also offer numerous other occasions to consume drinks
>> for pleasure." [Larousse, "Drink" entry]
>>
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en