Hi Bruno,

doing it in the SELECT-way is nice but you should consider using it with the
/SKIP-refinement. Without this you may end up with surprising results if one
value may occur in value-1 and value-2 position as in 
;------------------------------------
>> that's-life: [cats birds cats birds insects birds]
>> who-hunts?: func ['animal] [select that's-life animal]
>> who-hunts? birds
== cats
>> who-hunts? insects
== birds
>> prey-of?: func ['animal] [select that's-life animal]
>> prey-of? cats
== birds
>> prey-of? birds
== cats            ; OOPS!
;------------------------------------
              
The following design doesn't suffer from this difficulty and avoids
duplication of values, too, at the cost of a little bit more maintenance
work:

;------------------------------------
color-names:  [red green blue]
color-values: [255.0.0 0.255.0 0.0.255]
select-color-by-name: func [name [word!] /local color] [
    if color: find color-names name [pick color-values index? color]
]
select-color-by-values: func [value [tuple!] /local color] [
    if color: find color-values value [pick color-names index? color]
]
append-color: func [name [word!] value [tuple!]] [
    append color-names  color
    append color-values color
]
remove-color: func [name [word!] value [tuple!]] [
    remove find color-names  name
    remove find color-values value
]
;------------------------------------

A lot of improvements can be made to this, especially the REMOVE-COLOR is
somewhat bad designed in respect to data-integrity (try REMOVE-COLOR RED
0.255.0 - Hey, I'm color-blind ;-)
But what I like about the design this approach that it is easily expandable in
cases you have to deal with tuples of data of length greater than just 2.

HTH,

Christian 
 


-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to