• Re: A style question

    From B. Pym@21:1/5 to Brian on Fri Aug 9 07:40:20 2024
    Brian wrote:

    (defun fizz-buzz (n)
    (do ((i 1 (+ i 1)))
    ((> i n))
    (let
    ((fizz (= 0 (mod i 3)))
    (buzz (= 0 (mod i 5))))
    (if fizz (format t "Fizz"))
    (if buzz (format t "Buzz"))
    (format t "~A~%"
    (if (or fizz buzz) "" i)))))

    (fizz-buzz 100)

    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]

    newLISP

    (define (fizz)
    (define (any _test) (exists _test $args))
    (define (divis n) (= 0 (mod i n)))
    (for (i 1 21)
    (if (divis 3) (print 'fizz))
    (if (divis 5) (print 'buzz))
    (if (divis 7) (print 'zoom))
    (unless (any divis 3 5 7) (print i))
    (println)))

    (fizz)

    1
    2
    fizz
    4
    buzz
    fizz
    zoom
    8
    fizz
    buzz
    11
    fizz
    13
    zoom
    fizzbuzz
    16
    17
    fizz
    19
    buzz
    fizzzoom

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From B. Pym@21:1/5 to B. Pym on Fri Aug 9 08:53:24 2024
    B. Pym wrote:

    Brian wrote:

    (defun fizz-buzz (n)
    (do ((i 1 (+ i 1)))
    ((> i n))
    (let
    ((fizz (= 0 (mod i 3)))
    (buzz (= 0 (mod i 5))))
    (if fizz (format t "Fizz"))
    (if buzz (format t "Buzz"))
    (format t "~A~%"
    (if (or fizz buzz) "" i)))))

    (fizz-buzz 100)

    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]

    newLISP

    (define (fizz)
    (define (any _test) (exists _test $args))
    (define (divis n) (= 0 (mod i n)))
    (for (i 1 21)
    (if (divis 3) (print 'fizz))
    (if (divis 5) (print 'buzz))
    (if (divis 7) (print 'zoom))
    (unless (any divis 3 5 7) (print i))
    (println)))

    (fizz)

    1
    2
    fizz
    4
    buzz
    fizz
    zoom
    8
    fizz
    buzz
    11
    fizz
    13
    zoom
    fizzbuzz
    16
    17
    fizz
    19
    buzz
    fizzzoom


    Another way:

    (define-macro (try-all) ;; Arguments are in $args or (args).
    (let (_successes nil)
    (dolist (_expr $args)
    (when (eval _expr) (++ _successes)))
    _successes))

    (define (fizz)
    (define (divis n) (= 0 (mod i n)))
    (for (i 1 21)
    (unless
    (try-all
    (if (divis 3) (print 'fizz))
    (if (divis 5) (print 'buzz))
    (if (divis 7) (print 'zoom)))
    (print i))
    (println)))

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)