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

Reply via email to