Updating subject to make it make more sense, hopefully. On 13 November 2017 at 14:15, Alex Miller <a...@puredanger.com> wrote:
> Regarding the title, this is incorrect. Map keys are not functions; > keywords are functions that take an associative data structure and will > look themselves up in it. So, the premise here is not even correct to start. > > Usually we prefer to work by starting from a problem and consider > alternatives, but as you state below, you don't have a problem in mind. > > Normally, I don't offer possible solutions when I enquiring about a problem. Maybe with forethought context and or constraints... This is more of a solution (based on a lack of understanding) without a problem. If you like the problem I'm hoping to address is to reduce my lack of understanding. > > On Monday, November 13, 2017 at 3:49:41 AM UTC-6, Stephen Feyrer wrote: >> >> Hi there, >> >> This is possibly a silly question (and may have been asked before but I >> couldn't find earlier examples) so here it goes. >> >> > >> Get the nth element of the vector >> >> user=> (3 [1 "is" the :same]) >> :same >> >> >> > Note that you can do something similar now with: > > ([1 "is" the :same] 3) > This works for me :) > > Whereas in the situation with maps, keywords (a specific common key type) > are functions, here you are implying that anything could implicitly be > invokable as a lookup function on an associative data structure. This > doesn't make a lot of sense to me and would undoubtedly have performance > effects. Maybe there is some case like `(map 1 [[:a 0] [:b 1] [:c 2]])` > where this would make sense. But this doesn't make sense for all indexed > data structures, just those indexed by longs. Layering invocability on > longs would require special handling in the compiler (Keywords are a type > that embeds this by implementing IFn naturally, so it's not a special case). > >> >> Get the nthiness of an element in the vector >> >> user=> (::same [1 "is" the :same]) >> 3 >> >> > This is something completely different - a linear search for a match. > Clojure has considered and rejected making linear searching easier multiple > times. It's almost always a sign that you are using the wrong data > structure in the first place and should be using a hashed data structure > instead. There is no chance we would do something like this. > Perhaps, I'm not understanding vectors properly. A vector is a set of ordered elements, I think that is right. Then at some point you might want to get one of those elements picking it out by its index. Equally, this is probably where I've lost the plot you might want to know where in a vector your element is residing. Get the nthiness of an element in the vector >> >> user=> (:1 [1 "is" the :same]) >> (0 2) >> >> > I don't even understand what is intended here. > > You've already covered this above but I'll explain what I meant (just to be clear). user=> (nth [1 "is" the :same] 2) 1 And user=> ([1 "is" the :same] 0) 1 Therefore, a lookup of value '1' would return the indices for both occurrences in a list. > Taking things further into the realms of really you should have stopped >> there! >> >> Get the these element of the vector >> >> user=> ((1 3) [1 "is" the :same]) >> ("is" :same) >> >> >> Just for fun I tried: >> >> user=> ((:this :the) {:this "is" :the "same"}) >> >> >> >> NullPointerException user/eval786 (NO_SOURCE_FILE:1) >> >> >> The thought here was the same as the above only with a list of invocations to return a list of values. > >> I may be barking up the wrong tree or possibly just barking... I hope >> what I'm asking makes some sort of sense. >> > > Not particularly. > > >> By way of apology to the reader, when I began writing this question it >> was ill thought out and seemed a lot simpler. As a disclaimer, I can't >> think of direct examples how this would improve readability or such or even >> necessarily be useful. >> > > Seems like that should have been a sign. :) > That was one yes, the other was the suggestion that this might be a silly question. In hindsight, I think the question I'm looking at now maybe quite different to the one I thought I had when I started. At this point I think I would ask, how do you find the indices of elements within a vector for a certain value? Or perhaps, should you be needing to obtain the positional component of a value, what would be the correct data structure to use? For example, you're given a list (in an unspecified form) of horses from a race in their finishing order. Carrot Colonel Mustard Sugar Binky Mr. Ned Go Faster Stripes Stick Scary Monster Not Technically A Horse Binky Then (using Clojure) you're asked to get the positional value of 'Go Faster Stripes' or 'Binky'? -- Go forth and apply trigonometry in real world applications Stephen. -- 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 unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.