Subject: Re: A style question
From: rpw3@rpw3.org (Rob Warnock)
Date: Wed, 28 Feb 2007 00:31:05 -0600
Newsgroups: comp.lang.lisp
Message-ID: <zZSdnVArCY40vHjYnZ2dnUVZ_ruknZ2d@speakeasy.net>
<job-271842874@craigslist.org> wrote:
+---------------
| Another friend of mine commenting on the same FizzBuzz thread supplied 
| the following Python code. It certainly is concise:
| 
| for i in xrange(1,101):
|    print(str(i), "Fizz", "Buzz", "FizzBuzz")[(i%3==0)|(i%5==0)<<1]
| 
| I thought about retrofitting my Ruby version as an exercise, but alas, 
| Ruby doesn't allow shifting truth to the left :)
| 
| Forgive my ignorance, but is anything like the boolean bit shifting 
| technique used in the Python code above possible in Lisp? No big loss if 
| it isn't, just curious.
+---------------

Well, sort of... ;-}  ;-}

This one is both efficient -- *no* MOD calls at all! --
*and* so ugly only a parent could love it:  ;-}  ;-}

    (defun fizz-buzz (n)
      (loop for i from 1 to n 
	    and three-p in '#3=(nil nil t . #3#)
	    and five-p in '#5=(nil nil nil nil t . #5#)
	do (format t "~a~%" (cond
			      ((and three-p five-p) "FizzBuzz")
			      (three-p "Fizz")
			      (five-p "Buzz")
			      (t i)))))


-Rob

-----
Rob Warnock			<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607