This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home. For a version of this page that may be more recent, see NilIsFalse in WG2's repo for R7RS-large.

Nil­Is­False

cowan
2013-06-22 23:40:15
1history
source

R2RS, R3RS, and R4RS permit () and #f to be the same (in the sense of eq?), as is required in Common Lisp and most other Lisps; this was done to make conversion of older Lisp code easier. For the same reason, () counts as false for conditional tests in R2RS and R3RS, and is permitted but not required to count as false in R4RS. IEEE Scheme, R5RS, R6RS, or R7RS don't allow any of this confusion.

Almost all the Schemes in the test suite, even those that claim only R3RS or R4RS conformance, distinguish cleanly between () and #f, and treat only #f as false. The only exceptions are XLisp and Rep, which specifically state that they draw on ideas from both Scheme and Common Lisp, and consider () and #f to be the same.