Making whitespace meaningful in order of operations

Of all the mundane details that programming bothers me with, operator precedence/arithmetical order of operations pisses me off the most. Pardon the vulgarity, but if you've ever had to wonder whether 5 + 6 * 2 was equal to 22 or 17, or even worse--had a bug caused by guessing wrong in that sort of situation, you know how I feel.

 

I like using whitespace to disambiguate that sort of expression for myself, as in 5+6 * 2 (note the lack of space between "5", "+", and "2"). This works great; the "5+6" groups together to our eyes because of the lack of space, and is clearly separate from the "*" and "2" because of the intervening whitespace. (If you're interested: this sort of thing was studied by the German Gestalt psychologists.) The problem with using a scheme like this isn't that it doesn't work for us--it works great; the problem is that all programming languages I know of disregard the information contained in the whitespace. So while I'd say 5+6 * 2 equals 22, the computer would say otherwise.

Steve McConnell recommends you "use more parentheses than you think you need" (pg738 in Code Complete, 2nd edition). That solution is very practical, but it amounts to giving in to the language. I'm an idealistic young kid, and I think we should make the languages suit us instead of changing ourselves to suit the languages. I've also taken enough philosophy courses that just thinking bores me, so here's some action:

Type an arithmetic expression in the box below and then click "evaluate".

Below, you see the results of evaluating the above expression under two different schemes: JavaScript's standard order of operations and my "thoughtful" order of operations which groups expressions based on whitespace.
standard
thoughtful

The code that accomplishes this feat is simple; view source to see exactly how it's done. The heavy lifting is accomplished in under 10 lines of code, and those aren't very dense lines either.

Now the real question is, will I find some open source language and implement this thoughtful grouping? We'll see...

Leave a comment

About this Entry

This page contains a single entry by mason published on August 29, 2008 11:23 PM.

Spatial Frequency in Vision and (a bit about) Art was the previous entry in this blog.

Automatic style-checking with Strunk and White's rules is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

My photos

www.flickr.com
masonsimon's items Go to masonsimon's photostream