[REBOL] Re: 'get'ing a 'word from a block
From: nitsch-lists:netcologne at: 1-Jan-2003 8:58
d: [a b c]
blk: [1 2 3 4 5 6 7 8 9]
test: func [row [block!]] [?? row ?? a probe reduce row]
forskip blk length? d[ set d blk test d]
blk: head blk ;if you need blk later
==
row: [a b c]
a: 1
[1 2 3]
row: [a b c]
a: 4
[4 5 6]
row: [a b c]
a: 7
[7 8 9]
Tim Johnson wrote:
>Thank you Anton! I forgot about 'bind.
>
>I'm still in the dark a bit though, because
>I really want to get the values for 'a 'b 'c
>in 'test
>If I rewrite test as :
> test: func [row [block!]][?? row ?? a]
>
>>>foreach :d blk code: [
>>>
>[ ?? a ?? b ?? c
>[ test reduce bind d 'a
>[ ]
>a: 1
>b: 2
>c: 3
>row: [1 2 3]
>** Script Error: a has no value
>** Where: rejoin
>** Near: mold name: get name
>
>If possible, I would want to get
>'row as [a b c]
>and 'get 1 from a.
>
>Is this possible?
>
>And Happy New Year!
>-tim-
>
>* Anton <[anton--lexicon--net]> [021231 21:10]:
>
>>Well,
>>
>>Your block d contains three words, a b c, whose
>>context is... in that block... (I think).
>>You need to bind the words in the d block into
>>the foreach's context (which we can get to using
>>'a as an example word in that context.)
>>
>>Having bound the words in d to the foreach context,
>>they are still simply [a b c], so you need to
>>reduce the block get a block of values out.
>>
>>So a bit of binding and reducing and you are fixed:
>>
>> d: [a b c]
>> blk: [1 2 3 4 5 6 7 8 9]
>> test: func [row [block!]][?? row]
>> foreach :d blk code: [
>> ?? a ?? b ?? c
>> test reduce bind d 'a
>> ]
>>
>>Anton.
>>
>>>Hello Rebols:
>>> I have an example below where foreach sets a block
>>>of values, but I don't know how to retain those
>>>values within the block when I pass the block to
>>>another function:
>>>
>>>>>d: [a b c]
>>>>>
>>>== [a b c]
>>>
>>>>>blk: [1 2 3 4 5 6 7 8 9]
>>>>>
>>>== [1 2 3 4 5 6 7 8 9]
>>>
>>>>>test: func[row[block!]][?? row ?? a]
>>>>>foreach :d blk[?? a ?? b ?? c test d]
>>>>>
>>>a: 1
>>>b: 2
>>>c: 3
>>>; foreach sets the values in the block correctly
>>>row: [a b c]
>>>; the words are passed in the block to 'test
>>>** Script Error: a has no value
>>>** Where: rejoin
>>>** Near: mold name: get name
>>>; alas, can't get the value
>>>
>>>What am I doing wrong here?
>>>TIA
>>>--
>>>Tim Johnson <[tim--johnsons-web--com]>
>>>
>
-volker