Per the doc, last is linear time, and the source doesn't check for reversible.
user=> (source last) (def ^{:arglists '([coll]) :doc "Return the last item in coll, in linear time" :added "1.0"} last (fn last [s] (if (next s) (recur (next s)) (first s)))) unless i'm missing something with multimethod or protocol magic :) On Thu, Jun 9, 2011 at 10:49 PM, Sunil S Nandihalli <sunil.nandiha...@gmail.com> wrote: > as long as (reversible? of-whatever-collection) is true , last is almost a > constant time operation > > On Fri, Jun 10, 2011 at 8:20 AM, clojurefanxx <neuzhou...@gmail.com> wrote: >> >> i'm a newbie working thru 4clojure.com's problems #19 thru #21 where >> i'm asked to write a function, which when given a list or vector, >> returns the last, penultimate, or an arbitrary nth element, >> respectively. >> >> for problem #19 (return last element), using the function last was not >> accepted as a good solution for both lists and vectors, but the >> following was accepted: >> >> user=> (#(nth % (- (count %) 1)) '(5 4 3)) >> 3 >> user=> (#(nth % (- (count %) 1)) '[1 2 3 4 5]) >> 5 >> >> for problem #21, (return arbitrary element) , using the function nth >> or get was not accepted. >> >> --------------------------------------------------------------------------------------------- >> Write a function which returns the Nth element from a sequence. >> >> (= (__ '(4 5 6 7) 2) 6) >> >> (= (__ [:a :b :c] 0) :a) >> >> (= (__ [1 2 3 4] 1) 2) >> >> (= (__ '([1 2] [3 4] [5 6]) 2) [5 6]) >> >> ------------------------------------------------------------------------------------------------ >> >> >> i think using the nth or get functions on vectors to return an element >> at index position n should be fine performance-wise, >> but what's a general solution for lists that will perform better than >> O(n)? (i 'm assuming that's the reason why >> last, nth, and get were rejected when I tried them out as candidate >> solutions??) >> >> thanks for any help! >> >> >> >> -- >> 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 > > -- > 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 -- 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