RosettaCodeData/Task/FizzBuzz/NewLISP/fizzbuzz-3.l
2024-10-16 18:07:41 -07:00

47 lines
740 B
Common Lisp

(define (m-prime-gen)
(fn ( , n) ;; Unused parameter n is our local variable.
;; Self-modifying code.
(until (= 1 (length (factor (setf n (++ 2))))))
n))
(define (try-all) ;; The arguments are in (args) or $args.
(let (cnt (length (filter true? $args)))
(if (zero? cnt) nil cnt)))
(define (fizz)
(define (say? n s) (if (= 0 (% i n)) (print s))) ;; Dynamic scoping.
(for (i 1 21)
(let (p (m-prime-gen))
(unless
(try-all
(say? (p) 'fizz)
(say? (p) 'buzz)
(say? (p) 'boom)
(say? (p) 'crux)
(say? (p) 'ZAP))
(print i))
(println))))
(fizz)
1
2
fizz
4
buzz
fizz
boom
8
fizz
buzz
crux
fizz
ZAP
boom
fizzbuzz
16
17
fizz
19
buzz
fizzboom