-----Original Message-----
From: Anton Rolls [mailto:[EMAIL PROTECTED]
Sent: Wednesday, 19 November 2003 12:36 pm
To: [EMAIL PROTECTED]
Subject: RE: [REBOL] Re: [append][series]Appending to a series of
strings
How about this?
; initialize some random scores
scores: clear []
loop 30 [append scores random 20]
; figure out how many of each score
tallies: clear []
foreach uscore sort unique scores [
append/only tallies reduce [uscore length? remove-each score copy scores
[uscore <> score]]
]
Anton.
> Suppose one has a collection of small natural numbers (such as
> test scores ranging from 0 to 100) and one wants to know how many
> occurrences of each distinct number there are.
>
> Using Perl arrays:
>
> # assume @scores contains the raw data with dups
> @tallies = ();
> foreach $score (@scores) {
> ++$tallies[$score];
> }
> foreach $score (0..$#tallies) {
> print "$score: $tallies[$score]\n" if $tallies[$score];
> }
>
> Using REBOL blocks:
>
> ; assume SCORES contains the raw data with dups
> tallies: []
> foreach score scores [
> insert/dup tail tallies 0 score + 1 - length? tallies
> change at tallies score + 1 1 + pick tallies score + 1
> ]
> forall tallies [
> if 0 < tallies/1 [print [-1 + index? tallies ":" tallies/1]]
> ]
>
> or
>
> ; assume SCORES contains the raw data with dups
> tallies: []
> foreach score scores [
> either found? here: select tallies score [
> here/1: here/1 + 1
> ][
> append tallies reduce [score copy [1]]
> ]
> ]
> foreach [score tally] sort/skip tallies 2 [
> print [score ";" tally/1]
> ]
>
> REBOL is much more "literal"; there are no values that one does not
> explicitly create (although it is possible to be implicitly explicit
> at times ;-). On the other hand, it is necessary explicitly to
> manage details that aren't at the same logical level as the original
> problem (making sure that there enough "places" to store the next
> tally needed, etc).
>
> I'd be interested in any *self-contained* solutions to the above task
> that might be clearer than the above.
>
> -jn-
--
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.