09/07/07 14:14:42
>>380
% Prolog
t380 :- get_line(Line),atom_to_term(Line,Nissu,_),
'N日後は'(0,Nissu,2009/1/1,_年/_月/_日),
write_formatted('%t月%t日\n',[_月,_日]).
'N日後は'(N,N,_年/_月/_日,_年/_月/_日).
'N日後は'(M,N,_年_1/_月_1/_日_1,_年/_月/_日) :-
前日・今日(_年_1/_月_1/_日_1,_年_2/_月_2/_日_2),
M2 is M + 1,
'N日後は'(M2,N,_年_2/_月_2/_日_2,_年/_月/_日).
前日・今日(_前日の年 / 12 / 31,_年 / 1 / 1) :- 一つ違い(_前日の年,_年),!.
前日・今日(_年 / 2 / 29,_年 / 3 / 1) :- うるう年(_年),!.
前日・今日(_年 / 2 / 28,_年 / 3 / 1) :- \+(うるう年(_年)),!.
前日・今日(_年 / _前月 / 30,_年 / _月 / 1) :- 一つ違い(_前月,_月),member(_前月,[4,6,9,11]),!.
前日・今日(_年 / _前月 / 31,_年 / _月 / 1) :- 一つ違い(_前月,_月),member(_前月,[1,3,5,7,8,10,12]),!.
前日・今日(_年 / _月 / _前日,_年 / _月 / _日) :- 一つ違い(_前日,_日),!.
うるう年(_年) :- 0 is _年 mod 400,! .
うるう年(_年) :- 0 is _年 mod 100,!,fail.
うるう年(_年) :- 0 is _年 mod 4,!.
うるう年(_年) :- \+(0 is _年 mod 4),fail.
一つ違い(M,N) :- integer(M),!,N is M + 1 .
一つ違い(M,N) :- integer(N),!,M is N - 1 .