[quiz] [QUIZ 5b & 5e] [SPOILER] Date differences, and betting
Ivan Salazar
ivan.salazarv at gmail.com
Tue Jul 24 19:22:35 UTC 2007
>
> > Off topic: I am reading Paul Graham's ANSI Common Lisp and I have a
> > little question: why does he uses a lot (at least until chapter 4)
> > "and" clauses when I think he should use the "when" macro? For
> > example, in this code snip from figure 4.1:
> >
> > ;; This is a binary search algorithm as you may guess.
> > (defun bin-search (obj vec)
> > (let ((len (length vec)))
> > (and (not (zerop len)) ;Here is the and clause that I may change for
> > ;a when
> > (finder obj vec 0 (- len 1)))))
> >
> > (defun finder (obj vec start end)
> > ...)
> >
> > I've read that at least three times I think and it seems that there
> > will be more.
> > I know that the and clause gives the desired behavior of returning
> > the last value that satisfies it or the first one that doesn't, but
> > I would have used a when for some of the cases I've read (it is more
> > readable for me, I think).
> > Is he using the and clause for some reason that eludes me or is it
> > just a personal taste?
>
> In many cases I think it's just personal taste, i.e., a style issue
> like the one I mentioned above.
>
> But maybe not. If you consider the published code as a snapshot of a
> real application, some method to this madness emerges (maybe). In
> particular, consider the code over time. Perhaps he started out with
>
> (and (not (zerop len))
> (other code)
> (finder obj vec 0 (- len 1)))
>
> and then deleted the second clause. Maybe he didn't want to change
> it. Maybe he thought he might, at some later date, have to add some
> more code in the middle. Once you shift back and forth between
>
> (when (foo)
> (baz))
>
> and
>
> (when (and (foo) (bar))
> (baz))
>
> enough times, you start to want to skip the middle man and just go for
>
> (and (foo)
> (baz))
>
> every time, in case you have to add the middle (bar) later.
>
> Or so it seems to me, anyway. :)
>
> I haven't really thought about it all that much, but I might use the
> following rule of thumb: Start out with
>
> (when (foo)
> (baz))
>
> The first time you have to change it to
>
> (when (and (foo) (bar))
> (baz))
>
> change it to
>
> (and (foo)
> (bar)
> (baz))
>
> instead and leave it that way forever after. If it has changed once,
> it'll probably change again. :)
>
> -- Larry
>
> _______________________________________________
> quiz mailing list
> quiz at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/quiz
>
Outstanding. Thanks for the answer, Larry. I was starting to think that was
the answer, but you stated it very clear.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/quiz/attachments/20070724/e2f26ee1/attachment.html>
More information about the Quiz
mailing list