Kay C Lan wrote:

On 7/14/06, Alex Tweedly <[EMAIL PROTECTED]> wrote:

If there was any context where either could appear, there would be an
ambiguity - but there isn't.


So assuming the new syntax was adopted:

x = 4 -- I assume x is 4

Yes, x has the value 4 when the statement is complete.

(x = 5) -- I assume x is now 5

Nope - This would give a compile error, just like it does today. It says:
Handler: bad command
Object: button
Line: (x=5)
Hint: (
It says this because you cannot use an expression alone where a statement is expected, because doing so would be pointless. The value of the expression has nowhere to go - so it's a useless statement, and not allowed.

BTW - do not test this in the one-line message box. The one-line message box has the special case that if it sees an expression, it will add a "put" in front of it to output the value. That's a convenience special to the one-line msgbox. I have to admit this is one piece of behaviour that might need to change if this syntax were introduced.

set the customBoolenProp of stack myStack to (x = 4) -- it would put false

Yes, it would put false into the property

set the customNumericProp of stack myStack to (x = 6) -- it would put
6 into x and into the customProp

Nope. It would put false into the property, just like it does today. The phrase "x=6" is there as part of an expression, and so is calculated as part of that expression - has nothing to do with an assignment to x.


If I got use to 'x = 4' being a valid var assignment, then I would
assume that as with other Rev statements, placing it in brackets would
make it just as valid but calculated earlier, to have it suddenly not
have it work as expected is some cases (although I really can't see
myself using the above) would cause confusion.

Nope. Today you can put a part of an expression into brackets to force the relative order of the clauses of the expression; you cannot put a complete statement into brackets - it gives a compile error. So putting "x=4" into brackets as a statement would produce a compile error - just like you get today from the statement "(put 2 into x)"

Although you are probably right in that it may not break current code,
I see that it could create confusion, or at least have a bunch of
'extra' rules associated with it. I also assume that this is why
languages that use 'x = 6' use 'x == 6', because determining the
meaning by context seems a little roundabout when you can use syntax.

There are various reasons why other languages do that.
In Algol, I believe it was a deliberate choice for academic reasons (designed by mathematicians).
   (there may also be cases of ambiguity, but it's been tooooooo long ....)
Pascal followed it (I think).
FORTRAN had a single pass, non-recursive, non-backtracking parser, so needed to did it the very easy way :-) (funny - no-one's even suggested Transcript use "x .eq. 4" for equality comparisons :-) In C, there are places where the syntax allows *either* a statement *or* an expression (e.g. in the sub-clauses of the for statement), so you need to use different operators to distinguish the two cases Actually, in C the assignment operator is just another operator - it 'returns' the result of the operation - so it can be mixed freely within expressions (e.g. x = 4 + (y=4) put 8 into x !!)

And, I think, some languages just do it because their designers/users are used to having different operators, so they did the same.

On the other hand, there are a variety of languages (Babbage !?, many variants of Basic) which don't have those issues, so simply allow a single "=" for assignment or for equality comparison.

Transcript is a straightforward language (though very extensive), so there is no difficulty distinguishing the two cases.


--
Alex Tweedly       http://www.tweedly.net



--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.10.0/388 - Release Date: 13/07/2006

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to