Hi Joel,

I think this is a better generalization:

>> source repoke
repoke: func [
    "sets value within nested blocks"
    block [block! hash! function! object!]
    indexes [block!]
    value [any-type!]
][
    indexes: reduce indexes
    while [1 < length? indexes] [
        block: pick :block first indexes
        indexes: next indexes
    ]
    poke block first indexes value
]

>> a3: array [3 3 3]
== [[[none none none] [none none none] [none none none]] [[none none ...

>> repoke a3 [1 1 1] "something"
== ["something" none none]
>> a3
== [[["something" none none] [none none none] [none none none]] [[none ...

plus it's companion:

>> source repick
repick: func [
    "picks repeatedly"
    block [any-block! any-function! object!]
    indexes [block!]
][
    foreach i reduce indexes [block: pick :block i]
    :block
]


Eric

>Try the following...
>
>    >> a: array [4 4]
>    == [[none none none none] [none none none none]
>        [none none none none] [none none none none]]
>    >> a
>    == [[none none none none] [none none none none]
>        [none none none none] [none none none none]]
>    >> poke pick a 2 3 "Hello!"
>    == [none none "Hello!" none]
>    >> a
>    == [[none none none none] [none none "Hello!" none]
>        [none none none none] [none none none none]]
>
>Sorta uggggly, but easy to wrap into a func ...
>
>    >> set2d: func [b [block!] d1 [integer!] d2 [integer!] x] [
>    [    poke pick b d1 d2 x
>    [    ]
>    >> set2d a 3 2 "Goodbye!"
>    == [none "Goodbye!" none none]
>    >> a
>    == [[none none none none] [none none "Hello!" none]
>        [none "Goodbye! none none] [none none none none]]
>
>.... and to generalize ...
>
>    >> a3: array [3 3 3]
>    == [[[none none none] [none none none] [none none none]]
>        [[none none none] [none none none] [none none none]]
>        [[none none none] [no...
>    >> set3d: func [
>    [    b [block!] d1 [integer!] d2 [integer!] d3 [integer!] x][
>    [    poke pick pick b d1 d2 d3 x
>    [    ]
>    >> set3d a3 1 2 3 "YOW!"
>    == [none none "YOW!"]
>    >> a3
>    == [[[none none none] [none none "YOW!"] [none none none]]
>        [[none none none] [none none none] [none none none]]
>        [[none none none] [...
>    >>
>
>.... to even higher planes of existence.
>
>-jn-

Reply via email to