On Sep 27, 2012, at 12:10 PM, Tim Brown wrote: > What is the difference in correctness between "(= x 0)" vs. "(zero? x)"?
None, although neither one is equivalent to "(eq? 0 x)". > Fast is relevant to some questions (solutions) I have -- terminating tight > loops etc. And given a choice of (eq? 0 x), (= 0 x) and (zero? x), which > would, and which should take the shortest time to perform 10^12 times? If you're looking for elements specified by their position in a list of 10^12 elements, you should probably be using a different data structure in the first place :-) For almost any program I can think of, the performance difference among (eq? 0 x), (= 0 x), and (zero? x) is likely to be insignificant by comparison with other parts of the program. > Maybe I'm thinking a bit too much like a C programmer -- (!x)... works for > me as a test in so many ways; that I tend to want to use something like it > when I'm writing in other languages. (Where I should be using zero? false? > and/or null?). Yes, C programmers routinely rely on all sorts of machine-dependent assumptions: almost any datum can be viewed as an integer, null pointers are represented by the same bit pattern as the integer 0, the floating-point number 0.0 is represented by the same bit pattern as the integer 0, etc. I've worked on systems that intentionally used the bit pattern for 1, not 0, as a null pointer (it was a word-addressable machine, and if you tried to dereference an odd-numbered address, it would crash immediately, as one would expect of dereferencing a null pointer). And on MANY systems (including Racket), the floating-point number 0.0 doesn't necessarily resemble the integer 0. Stephen Bloch [email protected] ____________________ Racket Users list: http://lists.racket-lang.org/users

