Re: How do you change all elements in a Collection at the same time?
John Ersatznom wrote:
Hendrik Maryns wrote:
Nothing. Read the above comment as: if you want Lisp functionality, use
Lisp.
Lisp functionality? Lisp functionality is to tell you you have
unbalanced parentheses and leave you to find a needle in a haystack.
What he was looking for is myCollection collect: [:foo | foo + 1] which
is in a far nicer looking language. (But also a far slower one than
Java, unsuited for performing any serious work, last time I checked.)
"The above comment" (snipped; it was "If you want mapcar, you
know where to find it") was about the nature of collections. Java
offers several kinds, some of which rely on characteristics of the
objects they contain: invariant hashCode(), consistent behavior of
compareTo() and so on. These structured collections cannot tolerate
arbitrary and uncontrolled changes to their contained objects (the
O.P. asked "what if you won't know what `change()' will be?").
Lisp's mapcar operator applies to a List, a kind of collection
whose structure does not rely on the nature of its contents but
only on their order of appearance. By bringing it up, I intended
two things: to appear clever (lost cause) by paraphrasing a well-
known flippancy, but also to provoke the O.P. to think about what
makes a Lisp List different from, say, a Java SortedSet. Java's
List is a reasonably close (albeit imperfect) analogue of Lisp's,
and a method that applies an arbitrary transformation to the contents
might make sense. (Note that Java does not prevent the programmer
from extending List's supplied implementations, nor from rolling his
own.) However, the O.P. asked for a much more general operation
that would apply to every kind of Collection -- and it was this goal
I wanted to call into question.
--
Eric Sosman
esosman@acm-dot-org.invalid