このディレクトリの索引

国民の祝日である(_年,_月,_日) :-
        国民の祝日である(_,_年,_月,_日).

振替休日である(_年,_月,_日) :-
        祝日が日曜の場合は翌日以降の平日を振替休日にする(_年,_月,_日).

国民の休日である(_年,_月,_日) :-
        '国民の休日とは、国民の祝日にはさまれた平日を指す'(_年,_月,_日).


国民の祝日である(元旦,_年,1,1).
国民の祝日である(成人の日,1,_日) :-
        第二月曜日(_年,1,_日).
国民の祝日である(建国記念の日,_年,2,11) :-
        政令で定める.
国民の祝日である(春分の日,_年,3,_日) :-
        春分の日(_年,3,_日).
国民の祝日である(昭和の日,_年,4,29).
国民の祝日である(憲法記念日,_年,5,3).
国民の祝日である(みどりの日,_年,5,4).
国民の祝日である(こどもの日,_年,5,5).
国民の祝日である(海の日,_年,7,_日) :-
        第三月曜日(_年,7,_日).
国民の祝日である(敬老の日,_年,9,_日) :-
        第三月曜日(_年,9,_日).
国民の祝日である(秋分の日,_年,9,_日) :-
        秋分の日(_年,9,_日).
国民の祝日である(体育の日,_年,10,_日) :-
        第二月曜日(_年,10,_日).
国民の祝日である(文化の日,_年,11,3).
国民の祝日である(勤労感謝の日,_年,11,23).
国民の祝日である(天皇誕生日,_年,12,23).

祝日が日曜の場合は翌日以降の平日を振替休日にする(_振替休日の年,_振替休日の月,_振替休日の日) :-
        国民の祝日である(_,_振替休日の年,_振替休日の月,_日),
        'Zellerの公式を用いて曜日を得る'(_振替休日の年,_振替休日の月,_日,_,日曜),
        振替休日(_振替休日の年,_振替休日の月,_日,_振替休日の日).

'国民の休日とは、国民の祝日にはさまれた平日を指す'(_国民の休日の年,_国民の休日の月,_国民の休日の日) :-
        前日(_国民の休日の年,_国民の休日の月,_国民の休日の日,_前日の年,_前日の月,_前日の日),
        翌日(_国民の休日の年,_国民の休日の月,_国民の休日の日,_翌日の年,_翌日の月,_翌日の日),
        国民の祝日である(_,_前日の年,_前日の月,_前日の日),
        国民の祝日である(_,_翌日の年,_翌日の月,_翌日の日),!.

振替休日(_振替休日の年,_振替休日の月,_日,_振替休日の日) :-
        for(_日,_振替休日の日,31),
        \+(国民の祝日である(_,_振替休日の年,_振替休日の月,_振替休日の日)),
        'Zellerの公式を用いて曜日を得る'(_振替休日の年,_振替休日の月,_振替休日の日,_,_曜日),
        \+(_曜日=日曜),!.

祝日が日曜の場合は翌日以降の平日を振替休日にする(_振替休日の年,_振替休日の月,_振替休日の日) :-
        国民の祝日である(_,_振替休日の年,_振替休日の月,_日),
        'Zellerの公式を用いて曜日を得る'(_振替休日の年,_振替休日の月,_日,_,日曜),
        振替休日(_振替休日の年,_振替休日の月,_日,_振替休日の日).

'国民の休日とは、国民の祝日にはさまれた平日を指す'(_国民の休日の年,_国民の休日の月,_国民の休日の日) :-
        前日(_国民の休日の年,_国民の休日の月,_国民の休日の日,_前日の年,_前日の月,_前日の日),
        翌日(_国民の休日の年,_国民の休日の月,_国民の休日の日,_翌日の年,_翌日の月,_翌日の日),
        国民の祝日である(_,_前日の年,_前日の月,_前日の日),
        国民の祝日である(_,_翌日の年,_翌日の月,_翌日の日),!.

振替休日(_振替休日の年,_振替休日の月,_日,_振替休日の日) :-
        for(_日,_振替休日の日,31),
        \+(国民の祝日である(_,_振替休日の年,_振替休日の月,_振替休日の日)),
        'Zellerの公式を用いて曜日を得る'(_振替休日の年,_振替休日の月,_振替休日の日,_,_曜日),
        \+(_曜日=日曜),!.

第三月曜日(_年,_月,_日) :-
        for(15,_日,21),
        'Zellerの公式を用いて曜日を得る'(_年,_月,_日,_,月曜).

第二月曜日(_年,_月,_日) :-
        for(8,_日,14),
        'Zellerの公式を用いて曜日を得る'(_年,_月,_日,_,月曜).

春分の日(_年,3,_日) :-
        '「春分の日」および「秋分の日」の日付は、前年2月1日の官報で発表される。',
        fail.
春分の日(_年,3,_日) :-
        '国立天文台「暦象年表」に基づき',
        _年 >= 1980,
        _年 =< 2099,
        _日 is truncate(20.8431+0.242194*(_年-1980)-truncate((_年-1980)/4)),!.
春分の日(_年,3,23).

秋分の日(_年,9,_日) :-
        '「春分の日」および「秋分の日」の日付は、前年2月1日の官報で発表される。',
        fail.
秋分の日(_年,9,_日) :-
        '国立天文台「暦象年表」に基づき',
        _年 >= 1980,
        _年 =< 2099,
        _日 is truncate(23.2488+0.242194*(_年-1980)-truncate((_年-1980)/4)),!.
秋分の日(_年,9,23).

翌月(_年,12,_翌年,1) :-
        _翌年 is _年 + 1,!.
翌月(_年,_月,_年,_翌月) :-
        _翌月 is _月 + 1.

前日(_年,_月,_日,_前日の年,_前日の月,_前日の日) :-
        前日の月がわり調整(_年,_月,_日,_前日の年,_前日の月,_前日の日).

翌日(_年,_月,_日,_翌日の年,_翌日の月,_翌日の日) :-
        翌日の月がわり調整(_年,_月,_日,_翌日の年,_翌日の月,_翌日の日).

前日の月がわり調整(_整数年,1,1,_変更された整数年,12,31) :-
        _変更された整数年 は _整数年 - 1,!.
前日の月がわり調整(_整数年,_整数月,1,_整数年,_変更された整数月,31) :-
        member(_整数月,[2,4,6,8,9,11]),
        _変更された整数月 は _整数月 - 1,!.
前日の月がわり調整(_整数年,_整数月,1,_整数年,_変更された整数月,30) :-
        member(_整数月,[5,7,10,12]),
        _変更された整数月 は _整数月 - 1,!.
前日の月がわり調整(_整数年,3,1,_整数年,2,29) :-
        0 is _整数年 mod 4,!.
前日の月がわり調整(_整数年,3,1,_整数年,2,28) :-
        \+(0 is _整数年 mod 4),!.
前日の月がわり調整(_整数年,_整数月,_整数日,_整数年,_整数月,_変更された整数日) :-
        _変更された整数日 は _整数日 - 1,!.

翌日の月がわり調整(_整数年,12,31,_変更された整数年,1,1) :-
        _変更された整数年 は _整数年 + 1,!.
翌日の月がわり調整(_整数年,_整数月,30,_整数年,_変更された整数月,1) :-
        member(_整数月,[4,6,8,9,11]),
        _変更された整数月 は _整数月 + 1,!.
翌日の月がわり調整(_整数年,_整数月,31,_整数年,_変更された整数月,1) :-
        member(_整数月,[1,3,5,7,10]),
        _変更された整数月 は _整数月 + 1,!.
翌日の月がわり調整(_整数年,2,29,_整数年,3,1) :-
        0 is _整数年 mod 4,!.
翌日の月がわり調整(_整数年,2,28,_整数年,3,1) :-
        \+(うるう年(_整数年)),!.
翌日の月がわり調整(_整数年,_整数月,_整数日,_整数年,_整数月,_変更された整数日) :-
        _変更された整数日 は _整数日 + 1,!.

うるう年(_年) :-
        0 is _年 mod 400,!.
うるう年(_年) :-
        0 is _年 mod 100,
        !,
        fail.
うるう年(_年) :-
        0 is _年 mod 4,!.
うるう年(_年) :-
        \+(0 is _年 mod 4),
        fail.

'Zellerの公式を用いて曜日を得る'(_年,1,_日,_曜日を表す値,_曜日) :-
        _年_1 is _年 - 1,
        'Zellerの公式を用いて曜日を得る'(_年_1,13,_日,_曜日を表す値,_曜日),!.
'Zellerの公式を用いて曜日を得る'(_年,2,_日,_曜日を表す値,_曜日) :-
        _年_1 is _年 - 1,
        'Zellerの公式を用いて曜日を得る'(_年_1,14,_日,_曜日を表す値,_曜日),!.
'Zellerの公式を用いて曜日を得る'(_年,_月,_日,_曜日を表す値,_曜日) :-
        _曜日を表す値 is (_年 + truncate(_年 / 4) - truncate(_年 / 100) + truncate(_年 / 400) + truncate((13 * _月 + 8) / 5) + _日) mod 7,
        曜日を表す値(_曜日を表す値,_曜日),!.

曜日を表す値(0,日曜).
曜日を表す値(1,月曜).
曜日を表す値(2,火曜).
曜日を表す値(3,水曜).
曜日を表す値(4,木曜).
曜日を表す値(5,金曜).
曜日を表す値(6,土曜).

政令で定める.

'「春分の日」および「秋分の日」の日付は、前年2月1日の官報で発表される。'.

'国立天文台「暦象年表」に基づき'.