Guessing game
Mark Waddingham
mark at livecode.com
Tue Apr 3 03:51:18 EDT 2018
On 2018-04-02 21:28, J. Landman Gay via use-livecode wrote:
> I found this:
>
> ***
> Additionally the into clause has been added to all array set set
> operations allowing commands such as:
>
> intersect tLeft with tRight into tResult
>
> The operation of the commands is the same as the non-into form except
> that tLeft does not have to be a variable, and the result of the
> operation is placed into tResult rather than mutating tLeft.
> ***
>
> So when is an array not a variable?
I must confess I found this quite an interesting question - as it speaks
to the history of arrays in LiveCode.
Originally there were no arrays 'just' variables - a variable could hold
a string, nothing else.
Then arrays were added, but they were not 'first class citizens' - so a
perfectly reasonable mental model was that variables had been augmented
so that they could be collections of named variables - each holding a
string. (e.g. tFoo["a"], tFoo["b"] were both distinct variables, just
with a convenient/indexable way of referencing them, and passing them
around as a collection).
However, this changed when we added hierarchical arrays - i.e. being
able to set an array as the value of an array key. The variable centric
model then doesn't work so well - it is perhaps 'better' to think of
arrays as values like strings. i.e. Arrays ceased to be tied to the
notion of variable at all, and just became a 'value' which can be put
into a variable.
Personally I think I always thought of arrays in LiveCode as values, but
ones which had only been 'partially implemented' - there were lots of
places prior to adding hierarchical arrays which wouldn't work with the
existing notion of array, but had to be made to for hierarchical arrays
to be in any way useful.
Another way to think about 'into' being added to intersect/union is that
we've essentially added binary operators for array union and intersect:
intersect tLeft with tRight into tResult
Does the same thing as a hypothetical 'intersect' binary operator:
put tLeft intersect tRight into tResult
One could imagine a similar thing being added to the arithmetic
commands:
add tLeft to tRight into tResult
Would do nothing different from:
put tLeft + tRight into tResult
This would just be a different way of expressing the same thing
syntactically. (Note the 'into' form has not been added to the
arithmetic commands, and there is no binary intersect/union operator -
but perhaps both should be considered).
Warmest Regards,
Mark.
--
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps
More information about the use-livecode
mailing list