Significant Whitespace In Expressions |
January 8th, 2011 |
programming, math, ideas [html] |
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 errorAlgorithm:
for each number of spaces 0 on up: group any terms with that number of internal spaces by adding parens
Comment via: facebook