30 lines
518 B
Plaintext
30 lines
518 B
Plaintext
(defprolog fizz
|
|
0 <-- (is _ (output "Fizz"));
|
|
N <-- (when (> N 0)) (is N1 (- N 3)) (fizz N1);
|
|
)
|
|
|
|
(defprolog buzz
|
|
0 <-- (is _ (output "Buzz"));
|
|
N <-- (when (> N 0)) (is N1 (- N 5)) (buzz N1);
|
|
)
|
|
|
|
(define none
|
|
[] -> true
|
|
[true | _] -> false
|
|
[_ | B] -> (none B)
|
|
)
|
|
|
|
(define fizzbuzz
|
|
N M -> (nl) where (> N M)
|
|
N M -> (do
|
|
(if (none [(prolog? (receive N) (fizz N)) (prolog? (receive N) (buzz N))])
|
|
(output (str N))
|
|
(output "!")
|
|
)
|
|
(nl)
|
|
(fizzbuzz (+ N 1) M)
|
|
)
|
|
)
|
|
|
|
(fizzbuzz 1 100)
|