With all due respect, let me suggest that we check out code snippets
bofore posting them to the list.  The suggested code is extremely
broken:

    Copyright 2000 REBOL Technologies.  All rights reserved.
    >> a: make block! 1        ; could be make hash! for faster key search
    == []
    >> a/append [Key Value]
    ** Script Error: Invalid path value: append.
    ** Where: a/append [Key Value]
    >> TheValue: a/select Key
    ** Script Error: Invalid path value: select.
    ** Where: TheValue: a/select Key

A working variation is:

    >> a: make block! 1
    == []
    >> append a [Key Value]
    == [Key Value]
    >> select a 'Key
    == Value
    >>

Note that the use of bare words in the  append  means that the target
passed to  select  must be a  lit-word!  or an expression that EVALUATES
to the key word:

    >> foo: 'Key
    == Key
    >> select a foo
    == Value
    >> select a first [Key]
    == Value
    >> select a reduce ['Key]
    == Value

That requirement may be a bit unobvious/tedious.

My big problem with using  append  and  select  with a block as an
implementation of associative arrays is that the keys and values are
not distinguished.  Consider the imaginary product descriptions below:

>> appliance1: ["type" "tv" "screen" "b&w"   "size" 19 "color" "woodgrain"]
== ["type" "tv" "screen" "b&w" "size" 19 "color" "woodgrain"]
>> appliance2: ["type" "tv" "screen" "color" "size" 21 "color" "charcoal"]
== ["type" "tv" "screen" "color" "size" 21 "color" "charcoal"]

Now let's look up some properties of these appliances:

>> select appliance1 "color"
== "woodgrain"
>> select appliance2 "color"
== "size"
>>

Since keys and values are all just in a big pile, there's no guarantee
that a  select  or  find  using "color" as a key won't accidentally hit
an occurrence of "color" as a value instead (giving me the next key as
the result of  select ).

I'll follow up with an email containing a proposed implementation for
folks on the list to critique.

-jn-

[EMAIL PROTECTED] wrote:
> 
> >Has any one made an associative arrary in Rebol? Something like:
> >a/Associate Key Value
> >TheValue: a/find Key
> >It would be nice to show this to people used to using associative
> >arrays, that Rebol can do so as well.
> >
> >Andrew Martin
> 
> a: make block! 1        ; could be make hash! for faster key search
> a/append [Key Value]
> TheValue: a/select Key
> 
> That should make it ?
> 
> DK.

-- 
; Joel Neely  [EMAIL PROTECTED]  901-263-4460  38017/HKA/9677
REBOL []  print to-string debase/64 decompress #{
    789C0BCE0BAB4A7176CA48CAB53448740FABF474F3720BCC
    B6F4F574CFC888342AC949CE74B50500E1710C0C24000000}

Reply via email to