Re: A style question



<job-271842874@xxxxxxxxxxxxxx> 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@xxxxxxxx>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607

.



Relevant Pages

  • Re: A style question
    ... | I thought about retrofitting my Ruby version as an exercise, but alas, | Ruby doesn't allow shifting truth to the left:) ... but is anything like the boolean bit shifting | technique used in the Python code above possible in Lisp? ... and five-p in '#5=(nil nil nil nil t. ...
    (comp.lang.lisp)
  • Re: A style question
    ... Rob Warnock wrote: ... | Another friend of mine commenting on the same FizzBuzz thread supplied | the following Python code. ... and five-p in '#5=(nil nil nil nil t. ...
    (comp.lang.lisp)