And this is more like the Rebol way, as I imperfectly understand it:

[
Rebol [
    File: %"Tally Ho.r"
    ]

Tally!: make object! [
    make-Tally: does [make object! [Total: 0]]
    Zero: func [Tally [object!]] [Tally/Total: 0 Tally]
    Up: func [Tally [object!] /by N [number!]] [
        Tally/Total: Tally/Total + either by [N] [1] Tally
        ]
    Down: func [Tally [object!] /by N [number!]] [
        Tally/Total: Tally/Total - either by [N] [1] Tally
        ]
    Now?: func [Tally [object!]] [Tally/Total]
    ]

bunchanums: [3 1 35 8 4 5 52 42 19 13 32 43 81 2 6 34 46]

do bind [
    use [diffs evens odds] [
        diffs: make-Tally
        evens: make-Tally
        odds: make-Tally
        foreach num bunchanums [
            either even? num [
                Up/by Diffs num
                Up/by Evens num
                ][
                Down/by Diffs num
                Up/by Odds num
                ]
            ]
        print now? Diffs
        print now? evens
        print now? odds
        ]
    ] in Tally! 'self

]

>> do %"Tally Ho.r"
26
226
200

Note how small the actual tally object is: "[Total: 0]". Also note that the
binding is used like a dialect, but allows arbitrary Rebol script to be
used.

Andrew Martin
ICQ: 26227169
http://members.nbci.com/AndrewMartin/
http://members.xoom.com/AndrewMartin/
-><-


Reply via email to