このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1280653311/60
#  [1] 授業単元:プログラミング 
#  [2] 問題文(含コード&リンク):標準入力から西暦、月、日を表す整数を読み込み、その日が何曜日かを 
#                 判定するプログラムを作成せよ。 
#                 ※年をy,月をm,日をdとする 
#                 ※曜日はr=( y + y/4 - y/100 + y/400 + (13m+8)/ 5 + d ) % 7 
#                               ※r=0が日曜日、r=1が月曜日・・・・のようになる 
#                 ※ただし1月と2月は前の年の13月、14月として計算する 
#   
#  

'標準入力から西暦、月、日を表す整数を読み込み、その日が何曜日かを 判定する' :-
        '標準入力から西暦、月、日を表す整数を読み込み、'(_西暦,_月,_日),
        R is (_西暦 + _西暦 // 4 - _西暦 // 100 + _西暦 // 400 + (13 * _月 + 8) // 5 + _日) mod 7,
        曜日番号曜日変換(R,_曜日),
        write_formatted('%t年%t月%t日 は %t曜日です\n',[_西暦,_月,_日,_曜日]),!.

'標準入力から西暦、月、日を表す整数を読み込み、'(_西暦,_月,_日) :-
        項目名付き整数入力(西暦,_西暦),
        項目名付き整数入力(月,_月),
        項目名付き整数入力(日,_日),!.

項目名付き整数入力(_項目名,N) :-
        write_formatted_atom(_催促表示,'%tを入力してください : ',[_項目名]),
        催促付き整数入力(_催促表示,N).

催促付き整数入力(_催促表示,N) :-
        write(_催促表示),
        get_line(Line),
        atom_to_term(Line,N,_),
        催促付き整数入力判定(N),!.
催促付き整数入力(_催促表示,N) :- 催促付き整数入力(_催促表示,N).

催促付き整数入力判定(N) :-
        integer(N),!.
催促付き整数入力判定(N) :-
        \+(integer(N)),
        write_formatted('%tは整数ではありません\n',[N]),!,
        fail.

曜日番号曜日変換(0,日曜).
曜日番号曜日変換(1,月曜).
曜日番号曜日変換(2,火曜).
曜日番号曜日変換(3,水曜).
曜日番号曜日変換(4,木曜).
曜日番号曜日変換(5,金曜).
曜日番号曜日変換(6,土曜).