>
> Concat does the job except for keeping the input collection type.  It will 
> seq anything you throw at it.
>

But that should not matter to a beginner. I mean, if you are at the point 
where you are teaching people the differences between the data structures, 
than teach them the difference between list, vector and seq, and that 
includes the behavior of conj. Otherwise, if not for performance, there's 
no difference between these, they're all ordered collections of items.


On Wednesday, 18 July 2018 04:04:36 UTC-7, Gary Trakhman wrote:
>
> Concat does the job except for keeping the input collection type.  It will 
> seq anything you throw at it.
>
> There's a general trade-off here. When I started working in ocaml recently 
> I was taken aback that the List.map call we used constantly would have to 
> build the new list backwards in linear time, and then reverse it in linear 
> time, with some crazy stack expansions as an optimization for smaller 
> lists. I've said stuff like 'i would be happy to have a map call that 
> changed type on me sometimes', but honestly I've never had to dig that deep 
> for performance, and when I do, it's to switch to a more async-incremental 
> Pipe thing analogous to core.async chans.
>
> On Wed, Jul 18, 2018, 3:16 AM Didier <did...@gmail.com <javascript:>> 
> wrote:
>
>> It's never a good idea to use the wrong data structure for the job.
>>
>> And thus Clojure takes the stance that it won't make bad ideas easy for 
>> you to use. Yet, it will never prevent you from doing anything.
>>
>> If you want to do something bad, you'll need to get your own hands dirty.
>>
>> That's why slow data structure access functions don't exist as standard. 
>> That's why data transforms are lazy by default. And why the non lazy 
>> variant (transducers) do loop fusion for you. That's why mutability is ugly 
>> and requires you to wrap things in extra verbosity. That's why OOP isn't 
>> there, and forces you to use the host interop if you want it. That's why 
>> there's only recursive loops. Etc.
>>
>> The Clojure standard lib is opinionated. It's not trying to make 
>> everything easy and convenient. It's trying to make things simple to reason 
>> about, and promote Rich Hickeys opinion of what is a good idea, and what 
>> isn't.
>>
>> But, it can afford to be this way, because it made itself a Lisp, meaning 
>> it gave you all the power needed to disagree and make your own core, which 
>> follows your own opinions of good and bad.[1]
>>
>> Now, I recommend that everyone should have a core library of their own 
>> that they keep around for cases like this, where they disagree.
>>
>> And for beginners, I mean, what are you trying to teach them? What 
>> problem requires them to add items to the beginning and end of an ordered 
>> collection?
>>
>> Anyways, my advice is to teach them concat. It's even nicer then 
>> append/prepend. You just give it the arguments where you want them to go.
>>
>> (concat [1] [2 3])
>>
>> (concat [1 2] [3])
>>
>> And it works for any type of ordered collections, even arrays.
>>
>> Also, this blog I think does a great job at teaching all this to a 
>> beginner 
>> https://medium.com/@greg_63957/conj-cons-concat-oh-my-1398a2981eab
>>
>>
>>
>> [1] Except for reader macros. Rich didn't want you to be able to change 
>> the whole program syntax in unconstrained ways. That's probably a good 
>> thing to at least keep the foundation universal accross code bases.
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com 
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> 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+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
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.

Reply via email to