[REBOL] Re: The all function.
From: joel:neely:fedex at: 14-Apr-2002 7:42
Hi, Louis,
I've had a hard time understanding the exact setting of the
problem... Sorry!
Dr. Louis A. Turk
wrote:
> all [find database code (in database/2 'chknum) database/2/chknum]
>
> appears to be stopping most of the time at the first record in the
> database, and returning its chknum.
>
Let me make a couple of assumptions:
1) DATABASE is a series containing alternating strings (used
as keys) and objects (the corresponding values).
2) Each object has a CHKNUM attribute.
3) Given a key (string) you want the corresponding CHKNUM
value.
I can build a trivial test case for requirements (1) and (2) by
database: []
repeat i 10 [
append database join "X" i
append database make object! [
chknum: i
stuff: random 1000000
]
]
== ["X1"
make object! [
chknum: 1
stuff: 170632
] "X2"
make object! [
chknum: 2
stuff...
Under those assumptions...
rec: all [obref: select database code obref/chknum]
will give you back the CHKNUM field of the object associated
with CODE, or NONE if there is no such key.
>> rec: all [obref: select database "X7" obref/chknum]
== 7
>> rec: all [obref: select database "XYZ" obref/chknum]
== none
>> rec: all [obref: select database "X3" obref/chknum]
== 3
If the phrase
obref: select database code
finds the desired key, then OBREF will refer to the corresponding
object and
obref/chknum
will obtain the desired attribute.
OTOH, if the key does not exist in the series, then OBREF will
be NONE and the ALL will terminate with that value.
Hope I haven't missed the point!
-jn-
--
; Joel Neely joeldotneelyatfedexdotcom
REBOL [] do [ do func [s] [ foreach [a b] s [prin b] ] sort/skip
do function [s] [t] [ t: "" foreach [a b] s [repend t [b a]] t ] {
| e s m!zauafBpcvekexEohthjJakwLrngohOqrlryRnsctdtiub} 2 ]