このディレクトリの索引

% *** user: 何日後 / 5 ***
何日後(0,_日,_曜日,_日,_曜日) :- !.
何日後(N,_今日,_今日の曜日,_N日後,_N日後の曜日) :-
    前日・今日(_今日,_今日の曜日,_翌日,_翌日の曜日),
    N1 is N - 1,
    何日後(N1,_翌日,_翌日の曜日,_N日後,_N日後の曜日).

% *** user: 何日後 / 3 ***
何日後(0,_日,_日) :- !.
何日後(N,_今日,_N日後) :-
    前日・今日(_今日,_翌日),
    N1 is N - 1,
    何日後(N1,_翌日,_N日後).

% *** user: 何日後 / 3 *** 非決定性 ***
% 何日後(N,_基準日,X) :-
%     何日後(0,N,_基準日,X).
% 
% *** user: 何日後 / 4 *** 非決定性 ***
% 何日後(N,N,_年/_月/_日,_年/_月/_日).
% 何日後(M,N,_年_1/_月_1/_日_1,_年/_月/_日) :-
%     M2 is M + 1,
%     後日・今日(_年_1/_月_1/_日_1,_年_2/_月_2/_日_2),
%     何日後(M2,N,_年_2/_月_2/_日_2,_年/_月/_日).

% *** user: 何日前 / 5 ***
何日前(0,_日,_曜日,_日,_曜日) :- !.
何日前(N,_今日,_今日の曜日,_N日前,_N日前の曜日) :-
    前日・今日(_前日,_今日),
    N1 is N - 1,
    何日前(N1,_前日,_前日の曜日,_N日前,_N日前の曜日).

% *** user: 何日前 / 3 ***
何日前(0,_日,_日) :- !.
何日前(N,_今日,_N日前) :-
    前日・今日(_前日,_今日),
    N1 is N - 1,
    何日前(N1,_前日,_N日前).

% *** user: 何日前 / 3 *** 非決定性 ***
% 何日前(N,_基準日,X) :-
%     何日前(0,N,_基準日,X).
% 
% *** user: 何日前 / 4 *** 非決定性 ***
% 何日前(N,N,_年/_月/_日,_年/_月/_日).
% 何日前(M,N,_年_1/_月_1/_日_1,_年/_月/_日) :-
%     M2 is M + 1,
%     前日・今日(_年_2/_月_2/_日_2,_年_1/_月_1/_日_1),
%     何日前(M2,N,_年_2/_月_2/_日_2,_年/_月/_日).

% *** user: 前日・今日 / 4 ***
前日・今日(_前日の年 / 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]),
    曜日連鎖(_前日の曜日,_曜日),
    !.
前日・今日(_年 / _月 / _前日,_前日の曜日,_年 / _月 / _日,_曜日) :-
    一つ違い(_前日,_日),
    曜日連鎖(_前日の曜日,_曜日),
    !.

% *** user: 前日・今日 / 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]),
    !.
前日・今日(_年 / _月 / _前日,_年 / _月 / _日) :-
    一つ違い(_前日,_日),
    !.

% *** user: 曜日連鎖 / 2 ***
曜日連鎖(月曜,火曜).
曜日連鎖(火曜,水曜).
曜日連鎖(水曜,木曜).
曜日連鎖(木曜,金曜).
曜日連鎖(金曜,土曜).
曜日連鎖(土曜,日曜).
曜日連鎖(日曜,月曜).

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

% *** user: 一つ違い / 2 ***
一つ違い(M,N) :-
    integer(M),
    !,
    N is M + 1.
一つ違い(M,N) :-
    integer(N),
    !,
    M is N - 1.

% *** user: 今日 / 1 ***
今日(YY/MM/DD,_曜日) :-
    A is time,
    localtime(A,YY,MM,DD,WD,_,_,_,_),
    曜日を表す値(WD,_曜日).

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