Significant Whitespace In Expressions
Order of operations can conflict with what an expression looks like it should mean. For example, the expression a * b+c looks like it means a*(b+c) but technically (and in most computer languages) means (a*b)+c. This seems analagous to the reasoning behind python using indentation instead of braces. The C code:
if (x)
if (y)
z();
else
w();
looks like it should mean
if (x) {
if (y) {
z();
}
}
else {
w();
}
but actually means
if (x) {
if (y) {
z();
}
else {
w();
}
}
Python deals with this by treating the whitespace as significant, so:
if x:
if y:
z()
else:
w()
and
if x:
if y:
z()
else:
w()
both mean what they look like they should mean.
Some examples of how I would propose we do things instead:
write to mean
----- -------
a+b a+b
a + b*c a+(b*c)
a * b+c a*(b+c)
a+b * c+d (a+b)*(c+d)
a+b - c+d (a+b)-(c+d)
a+b * c+d - e+f (a+b) * ((c+d) - (e+f))
a * c + d + e a*(c+d+e)
a + b a+b, maybe yields warning
a-b+c error
a*b+c error
Algorithm:
for each number of spaces 0 on up:
group any terms with that number of internal
spaces by adding parens
Comment via: facebook