Re: A style question

Liste des GroupesRevenir à cl lisp 
Sujet : Re: A style question
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp
Date : 09. Aug 2024, 10:53:24
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v94le0$lg03$1@dont-email.me>
References : 1
User-Agent : XanaNews/1.18.1.6
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)))
 


Date Sujet#  Auteur
9 Aug 24 * Re: A style question2B. Pym
9 Aug 24 `- Re: A style question1B. Pym

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal