Seems to me that you can make a case for a seq is sort of like an
immutable PersistentIterator would be.
Iterator - next (get object)
seq - first (get object)
Iterator - next (mutate to point to next object)
seq - next (return new seq whose first is next object)
On Tue, Dec 3, 2013 at 2:49
Actually, I'd say seqs are very much *unlike* iterators in other languages
(Java in particular).
Iterators - stateful cursors that conflate iteration with a check for
whether more elements exist
Seqs - immutable persistent views of a collection that separate iteration
from checking for more
Perhaps I should have said that seqs fulfil the same role as iterators do,
rather than claiming they're alike :)
- James
On 2 December 2013 21:42, Alex Miller a...@puredanger.com wrote:
Actually, I'd say seqs are very much *unlike* iterators in other languages
(Java in particular).
Great point...
--
--
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,
Interesting alternatives. (vec) makes a vector out of a collection, so this
is meant to be faster than (apply vector)? Also how does (into []) differ
from (vec) in terms of what it does and its performance?
On Saturday, 30 November 2013 21:48:10 UTC, Kelker Ryan wrote:
Vectors are mostly for
Can a seq be thought of as a kind of a list of pointers to the original
vector elements then? If so, then does an operation on a vector, (e.g.
reverse), cause clojure to internally generate a seq of pointers to the
original vector elements? In other words seqs seem to provide a layer of
Seqs in Clojure are very much like iterators in other languages. They're an
abstraction for navigating a sequential data structure.
Also because values in Clojure are immutable, you rarely, if at all,
encounter situations where those objects need to be copied. Why would you,
when you can just
Hi,
I am trying to understand the manipulation of vectors from an efficiency
point of view. For example if I want to reverse a vector I can do the
following
(apply vector (reverse [1 2 3]))
My understanding is that reverse will create a new list object (3 2 1) then
this will be used to
On Sat, 30 Nov 2013 13:15:33 -0800 (PST)
Andy Smith the4thamig...@googlemail.com wrote:
Why dont we have a version of map that returns a vector when given a
vector? We can do this kind of thing in other languages with
templates/generics why not clojure?
we do have mapv :)
Jim
--
--
You
On Sat, 30 Nov 2013 13:15:33 -0800 (PST)
Andy Smith the4thamig...@googlemail.com wrote:
but
my question is really about the more general case of any function
that manipulates a vector e.g. the following also returns a list
rather than a vector as desired,
In Clojure you rarely have to worry
Vectors are mostly for speed and maintaining value sequence order. Try this = (vec (reverse [1 2 3]))Not this = (apply vector (reverse [1 2 3]))As an alternative you can do this = (into [] (reverse [1 2 3]))You can always use mapv when calling fun for each coll object.Try this = (mapv #(* 2 %) [1
An option for doing performant (numerical) operations with vectors in Clojure
is the vectorz-clj [1] library. There's also core.matrix [2] for
multi-dimensional matrices in general.
Hope it helps,
Juan
[1]: https://github.com/mikera/vectorz-clj/wiki
[2]:
12 matches
Mail list logo