• Posts
  • RSS
  • ◂◂RSS
  • Contact

  • Significant Whitespace In Expressions

    January 8th, 2011
    ideas, math, programming  [html]
    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

    Recent posts on blogs I like:

    Some reasons to work on productivity and velocity

    A common topic of discussion among my close friends is where the bottlenecks are in our productivity and how we can execute more quickly. This is very different from what I see in my extended social circles, where people commonly say that velocity doesn…

    via Posts on Dan Luu October 15, 2021

    EDT with updating double counts

    I recently got confused thinking about the following case: Calculator bet: I am offered the opportunity to bet on a mathematical statement X to which I initially assign 50% probability (perhaps X = 139926 is a quadratic residue modulo 314159). I have acce…

    via The sideways view October 12, 2021

    Meditations on newborns

    [Content: death.]I wrote most of this a couple of months ago when Nora was a newborn, but the first few months are not that conducive to finishing blog posts. New babies put you into a liminal period, both in your own experience and in how others treat yo…

    via The whole sky October 3, 2021

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact