47 lines
740 B
Common Lisp
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
|