On Sat, Feb 18, 2012 at 09:02:41PM -0500, Stephen Bloch wrote: [...] > I see a lot of my students doing this -- in whatever language -- because they > think of Booleans as a way to decide which of two things to DO, rather than > as legitimate values in their own right. In fact, the whole world of > expressions is a bit of a foreign country -- a sort of "adjunct" to the > more-legitimate world of statements. > > if (blah == true) { > return true; > } > else { > return false; > }
Yes, I talked with my 3rd-year PL students about this, with examples in Racket. Then an assignment had them take what I called "Π-expressions [s-expressions representing Python code, spit out by a little Python programm walking an AST produced by complier.ast], and find exactly those two style issues above [and also string literals "True"/"False", which 1st-years are using for booleans, and then it occurred to us that identifier 'true' is a common problem due to Python's not quite fully lexical scoping]. Yet some students still used these forms in earlier parts of the assignment and didn't notice nor remember and go back [at least the ones I trust not to claim that instead of laziness]! > > For those of us forced to teach in Java, CheckStyle has two modules, > SimplifyBooleanExpression and SimplifyBooleanReturn, that catch things like > this. > > > Stephen Bloch > sbl...@adelphi.edu Python's PEP 8 style guide mentions the comparison problem, but only "== True" and "is True": nothing about inequality nor false literal, and not selection. http://www.python.org/dev/peps/pep-0008/ On a more productive note: in Racket code I define and use 'implies' a lot, often conjoined, for predicates. It's mainly of declarative value, which is perhaps why it's uncommon in implementation despite how common it is in specification. And for boolean expressions in general I also use 'neither'. Are these something that others [would] use and so could be added to Racket's library? ____________________ Racket Users list: http://lists.racket-lang.org/users