このディレクトリの索引

fizzbuzz(_まで) :-
        fizzbuzz([],_まで,あとふたつ,あとよっつ).

fizzbuzz(L1,_まで,_,_) :-
        length(L1,_まで),!.
fizzbuzz(L1,_まで,_Fizzまであといくつ_1,_Buzzまであといくつ_1) :-
        fizzbuzz_1([_|L1],_Fizzまであといくつ_1,_Buzzまであといくつ_1,_Fizzまであといくつ_2,_Buzzまであといくつ_2,Y),
        writef('%t ',[Y]),
        fizzbuzz([_|L1],_まで,_Fizzまであといくつ_2,_Buzzまであといくつ_2).

fizzbuzz_1(_,ないよ,ないよ,あとふたつ,あとよっつ,'BuzzFizz').
fizzbuzz_1(_,ないよ,_Buzzまであといくつ_1,あとふたつ,_Buzzまであといくつ_2,'Fizz') :-
        ひとつ減らすよ(_Buzzまであといくつ_1,_Buzzまであといくつ_2).
fizzbuzz_1(_,_Fizzまであといくつ_1,ないよ,_Fizzまであといくつ_2,あとよっつ,'Buzz') :-
        ひとつ減らすよ(_Fizzまであといくつ_1,_Fizzまであといくつ_2).
fizzbuzz_1(L1,_Fizzまであといくつ_1,_Buzzまであといくつ_1,_Fizzまであといくつ_2,_Buzzまであといくつ_2,N) :-
        ひとつ減らすよ(_Fizzまであといくつ_1,_Fizzまであといくつ_2),
        ひとつ減らすよ(_Buzzまであといくつ_1,_Buzzまであといくつ_2),
        length(L1,N).

ひとつ減らすよ(あとよっつ,あとみっつ).
ひとつ減らすよ(あとみっつ,あとふたつ).
ひとつ減らすよ(あとふたつ,あとひとつ).
ひとつ減らすよ(あとひとつ,ないよ).