21 lines
553 B
Prolog
21 lines
553 B
Prolog
% N /3? /5? V
|
|
fizzbuzz(_, yes, yes, 'FizzBuzz').
|
|
fizzbuzz(_, yes, no, 'Fizz').
|
|
fizzbuzz(_, no, yes, 'Buzz').
|
|
fizzbuzz(N, no, no, N).
|
|
|
|
% Unifies V with 'yes' if D divides evenly into N, 'no' otherwise.
|
|
divisible_by(N, D, V) :-
|
|
( 0 is N mod D -> V = yes
|
|
; V = no).
|
|
|
|
% Print 'Fizz', 'Buzz', 'FizzBuzz' or N as appropriate.
|
|
fizz_buzz_or_n(N) :-
|
|
divisible_by(N, 3, Fizz),
|
|
divisible_by(N, 5, Buzz),
|
|
fizzbuzz(N, Fizz, Buzz, FB),
|
|
format("~p -> ~p~n", [N, FB]).
|
|
|
|
main :-
|
|
foreach(between(1,100, N), fizz_buzz_or_n(N)).
|