::  Posts  ::  RSS  ::  ◂◂RSS  ::  Contact

Significant Whitespace In Expressions

January 8th, 2011
programming, ideas, math

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

More Posts:

Older Post:

Newer Post:


  ::  Posts  ::  RSS  ::  ◂◂RSS  ::  Contact