Hi REBOLians:

Because the dat I use are stored into deep-nested blocks, I had to use
multiple select statement to acces it:

>> b: [label1 [label2 [label3 [data1 label4 [data2]]]]]

>> select select select b 'label1 'label2 'label3
== [data1 label4 [data2]]

It works fine, but it does not help readability and takes a lot of place !

SO, I thought of:

select-deep: func [
    data [block!]
    arg1 [any-word!]
    arg2 [any-word! unset!]
    arg3 [any-word! unset!]
    arg4 [any-word! unset!]
    arg5 [any-word! unset!]
][
    either value? 'arg2 [
        either value? 'arg3 [
            either value? 'arg4 [
                either value? 'arg5 [
                    return select select select select select data arg1 arg2
arg3 arg4 arg5
                ][
                    return select select select select data arg1 arg2 arg3
arg4
                ]
            ][
                return select select select data arg1 arg2 arg3
            ]
        ][
            return select select data arg1 arg2
        ]
    ][
        return select data arg1
    ]
]

which could be used:

>> select-deep b 'label1
== [label2 [label3 [data1 label4 [data2]]]]
>> select-deep b 'label1 'label2
== [label3 [data1 label4 [data2]]]
>> select-deep b 'label1 'label2 'label3
== [data1 label4 [data2]]
>> first select-deep b 'label1 'label2 'label3
== data1
>> select-deep b 'label1 'label2 'label3 'label4
== [data2]
>> first select-deep b 'label1 'label2 'label3 'label4
== data2

which seems a little bit more practical to me.

I like this approach, but there's for sure a more elegant solution to it...
Any idea ?

Regards,

chr==


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

Reply via email to