I would say we can have different ways of designing things. A way is to design abstractions and provide services on top on theses abstractions. The abstraction here is ISeq. That is sequences. Last is not part of the ISeq abstraction and just work on top of it. There is no way to access last element directly from something that is just a an ISeq. So last can't use it.
If last was part of ISeq abstraction, you would not need a separate last function at all. But this would also mean that all ISeq implementations would need to implement last. This would be sure conveniant, but this is not the same abstraction. It is also heavier (more code, more maintenance...). And for some implementation like networks streams, this would be anoying than anything as it would provide no added value. Seq abstraction is exactly that: a very basic (yet powerfull) abstraction for accessing streams, linked list and other specialized structures that are sequential in essence. Clojure team could have designed last to work on any possible type where it make sense and so have better performance for each possible type. An efficient implementation would use a protocol to do so. Making last its own abstraction. This is indeed possible, but was not the choice here. Fact is others abstractions already allow you to have the last element directly like Indexed if this important to you. So yes we could have a better last, promoting it to a full abstraction. Like clojure could be many more things. Is this REALLY a priority for the future of clojure? Not at least for clojure core team. I tend to share their views. You have the right to disagree. On my side, I'am far more interrested to see progress in clojurescript, IDEs, tooling, maybe even grid computing. You care about last. This is your right... And well why not implement your own last in contrib or private lib and use if it is important? Like other members of the community implemented code matching their own interrest. It is logical you ask for it, but there is no need to insist or maybe be a little offensive if others don't share your views. Regards, Nicolas Bousquet. On 29 juin, 01:32, Warren Lynn <wrn.l...@gmail.com> wrote: > This is an off-shoot subject from my last post "General subsequence > function". > > I found people had similar questions before (one year > ago):http://groups.google.com/group/clojure/browse_thread/thread/712711f04... > > As of Clojure 1.4, seems nothing changed, as "source" show here: > > user> (source last) > (def > ^{:arglists '([coll]) > :doc "Return the last item in coll, in linear time" > :added "1.0" > :static true} > last (fn ^:static last [s] > (if (next s) > (recur (next s)) > (first s)))) > > Any reason for that? Thanks. -- 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