Hello, Joachim,

[EMAIL PROTECTED] wrote:
> On 03-Nov-00, Andrew Martin wrote:
> >AM Joachim Thomas wrote:
> >AM> having this
> >AM>
> >AM> myblock:  [[one [1 2 3]][two [4 5 6]][three [7 8 9]]]
> >AM>
> >AM> I can extract a value and put it in
> >AM>
> >AM> myvalue: myblock/1/2/3
> >AM
> >AM> but if I change myvalue: the result is only local, not
> >AM> global to myblock, so is there a way to assign the
> >AM> content of myblock, like a pointer, to the variable...

I'll be delighted to have someone prove me wrong, but AFAIK
there is no way to create "shortcuts" to arbitrary "places"
in a REBOL data structure.  You *can* do this for reference
types (e.g., blocks) so that a lame answer to your original
question would be

    shortcut: myblock/1/2
    print shortcut/3
    shortcut/3: 33

I don't know what your perceived need to do this is, but if
you're trying to tweak for speed, the use of a reference to
the lowest-level block in the data structure will eliminate
some of the traversal.

> By the way, is there a method to search (deep/recursively)
> into block, not only at the first level?

One way to write such a thing...

    deepfind: func [b [block!] v [any-type!] /local c d] [
        either found? d: find b v [
            d
        ][
            c: b
            forall c [
                if all [block? d: first c  d: deepfind d v] [
                    return d
                ]
            ]
            none
        ]
    ]

which, given your

        myblock:  [[one [1 2 3]][two [4 5 6]][three [7 8 9]]]

does the following

    deepfind myblock 5         == [5 6]
    deepfind myblock 'three    == [three [7 8 9]]
    deepfind myblock 1         == [1 2 3]

> And accessing into blocks, like myblock/1/2/3 using
> indexes/variables and not direct references?

    >> i: 1                == 1
    >> j: 2                == 2
    >> k: 3                == 3
    >> myblock/:i/:j/:k    == 3

Hope this helps!

-jn-
-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to