# Quote o' the Week: Iversons convention

Posted on September 2, 2010
by Tommy McGuire

While looking for a copy of Donald Knuth's "Notes on avoiding go to statements" (I am fairly sure the person I am looking for is Knuth, and the paper I am looking for is not "Structured programming with go to statements"), I found "Two Notes on Notation" at his Preprints of Recent Papers page. The first notation he found "considerably more useful than [he] had previously realized" is Iverson's convention:"If α and β are arbitrary entities and R is any relation defined on them, the relational statement (αRβ) is a logical variable which is true (equal to 1) if and only if α stands in the relation R to β. For example, if x is any real number, then the function(From Iverson's

(x > 0) − (x < 0)

(commonly called the sign function or sgn x) assumes the values 1, 0, or −1 according as x is strictly positive, 0, or strictly negative.”

*A Programming Language,*1962.)

Knuth goes on to say,

When I read that, long ago, I found it mildly interesting but not especially significant. I began using his convention informally but infrequently, in class discussions and in private notes. I allowed it to slip, undefined, into an obscure corner of one of my books[...]. But when I prepared the final manuscript of [Iverson's convention isConcrete Mathematics], I began to notice that Iverson’s idea led to substantial improvements in exposition and in technique.

*almost*the behavior of Boolean relations in C and C++ (prior to the introduction of explicit Booleans), where the value of (x > 0) is either zero (for false) or non-zero (for true).

Since C is very nearly my native language, I was at first struck by the relationship between Knuth and Iverson's essentially mathematical notation and my oft-apologized-for programming idiom. Then, I realized that instead of apologizing for C's lack of explicit Booleans, I should have been apologizing for

*poor definition*of the idea; rather than non-zero for true, it really, really should have been only one.