このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/6
#  [1] 授業単元:C言語基礎 
#  [2] 問題文(含コード&リンク):http://ime.nu/www.dotup.org/uploda/www.dotup.org1254228.txt.html 
#  
#  [1]呼び出された回数を表示する関数 count を作成せよ.ただし,呼び出された回数が 3 の
#     倍数のときには回数の後に!を,5 の倍数のときには?を付けて表示すること.なお,プログラム中では
#     グローバル変数を使用しないものとする.
#     下のmain関数で count を呼び出した場合,正しい動作結果が得られるか確認せよ
#  

'呼び出された回数を表示する関数 count を作成せよ.ただし,呼び出された回数が 3 の倍数のときには回数の後に!を,5 の倍数のときには?を付けて表示する' :-
        assertz((count(1) :- fail)),
        assertz((count(N) :- retract((count(N) :- _)),Mod3 is N mod 3,Mod5 is N mod 5,count表示(N,Mod3,Mod5),N2 is N + 1,asserta((count(N2) :- fail)))).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

count(1) :- fail.
count(N) :-
        retract((count(N) :- _)),
        Mod3 is N mod 3,
        Mod5 is N mod 5,
        count表示(N,Mod3,Mod5),
        N2 is N + 1,
        asserta((count(N2) :- fail)).

count表示(N,0,0) :- write_formatted('%t!? ',[N]),!.
count表示(N,0,_) :- write_formatted('%t! ',[N]),!.
count表示(N,_,0) :- write_formatted('%t? ',[N]),!.
count表示(N,_,_) :- write_formatted('%t ',[N]),!.