[racket] in praise of if's mandatory else clause
Hey, here is what I had written: see purpose statement:
;; N -> Boolean
;; simplistic definition
(define (leap-year? y)
(= (remainder y 4) 0))
On May 31, 2011, at 8:55 AM, Pierpaolo Bernardi wrote:
> On Tue, May 31, 2011 at 07:07, Richard Cleis <rcleis at mac.com> wrote:
>> Buggy loops can also be avoided by reducing the problem. These leap-year cases are less troubling if the function that really matters is used: the days in a given year.
>>
>> (define (days-in-year year) (if (= 0 (remainder year 4)) 366 365))
>
> Please. I understand that it is just an example, and that you most
> certainly know the correct definition of a leap year, but someone might
> not know it and blindly copy this function somewhere where it can cause
> harm.
>
> Kids, use this one instead:
>
> (define (leap-year? year)
> (and (zero? (modulo year 4))
> (or (not (zero? (modulo year 100)))
> (zero? (modulo year 400)))))
>
> (define (days-in-year year)
> (if (leap-year? year)
> 366
> 365))
>
>
> 8^)
>
> P.