Thanks,  Did not understand this aspect of "paths".
Harold Grovesteen

GS Jones wrote:

> From: "Harold Grovesteen"
> 
>> Can someone explain exactly what this code is doing?  I'm confused by
>> this usage of ":" and its relationship to a block.
>> [EMAIL PROTECTED] wrote:
>> 
>> 
>>> Thanks  Renaud,
>>> 
>>> <Renaud>
>>>   MultiplyBlocks: func [
>>>        Block1 Block2
>>>       /local sum
>>>   ][
>>>        sum: 0
>>>        repeat i min length? Block1 length? Block2 [
>>>            sum: sum + (Block1/:i * Block2/:i)
>>>       ]
>>>       return sum
>>>   ]
>>> </Renaud>
>> 
> 
> Hi, Harold,
> Using the colon before a word retrieves its value.  In the case where it is
> used as a part of a path, then the value serves as an index.
> A different example:
> 
> a: [cat dog]
> :a     ;returns the value of the word a, which is the block
> a/1   ;returns cat
> i: 1
> a/:i  ;returns cat
> 
> Hope this helps.
> --Scott Jones
> 
>>> What was missing from my knowledge was how to reference a block using a
>>> variable (pardon my non-Rebol terminology) ..... When I'd tried things
>> 
> like
> 
>>> Block1/Ind I got told that was a bad path. Your little colon makes all
>> 
> the
> 
>>> difference.
>>> 
>>> <Renaud>
>>>  Note that you don't need to explicitly use RETURN in your functions,
>> 
> since
> 
>>>  the last value of the affectation is still available when Rebol exits
>> 
> the
> 
>>>  loop.
>>> </Renaud>
>>> 
>>> True for MultiplyBlocks1. But MultiplyBlocks2 does need an explicit
>> 
> return,
> 
>>> at least on my machine. And, maybe it's a matter of style, but I'd
>> 
> rather
> 
>>> have an explicit return: it helps a stranger's eye when looking at code.
>> 
> It
> 
>>> also means I can add debugging code without breaking assumptions.
>>> 
>>> <Renaud>
>>> It's also interesting to notice the relative speed of each
>>>  function (multiply 2 blocks of 15 integers):
>>> <snip>
>>> </Renaud>
>>> 
>>> I've changed my code to your "block/:i" format. It knocks 15% of the
>>> application run time. A worthwhile improvement indeed.
>>> 
>>> <Brett>
>>> Next option would be to use Ladislav's %highfun.r script
>>> (http://www.rebol.org/advanced/index.html). There you will find
>> 
> functions
> 
>>> that will make this work more elegant, or a technique to make the
>> 
> functions
> 
>>> I've shown more generic.
>>> </Brett>
>>> 
>>> Thanks for this reference. I certainly don't want to spend my life
>>> reinventing the wheel, and especially not clunky wheels
>>> 
>>> 
>>> <Michael>
>>> To write the most compact piece of code for performing this task one
>> 
> could
> 
>>> split some hairs and chop out a few chars here and there, but that does
>> 
> not
> 
>>> necessarily make it more readable/maintainable or better.
>>> </Michael>
>>> 
>>> I wasn't trying to write the shortest possible code. But I like to think
>> 
> that
> 
>>> I write code that is easy to follow. Which is why the PICKs and FIRSTs
>> 
> in my
> 
>>> two samples niggled. They cluttered a function that ought to be simple.
>> 
> Call
> 
>>> it programmer's intuition, but I knew there must be a better way. But my
>>> RTFMing skills had failed to find it.
>>> 
>>> 
>>> Thanks for all the help guys. I think I am beginning to get the hang of
>> 
> this
> 
>>> language!
>>> Colin
>> 

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

Reply via email to