このディレクトリの索引

計画停電グループ所属(グループ1,西荻).
計画停電グループ所属(グループ1,所沢).
計画停電グループ所属(グループ1,横浜南).
計画停電グループ所属(グループ1,けやき台).
計画停電グループ所属(グループ1,狭山ヶ丘).
計画停電グループ所属(グループ1,大井).
計画停電グループ所属(グループ4,上野毛).
計画停電グループ所属(グループ4,大井).
計画停電グループ所属(グループ5,埼玉).
計画停電グループ所属(グループ5,熊谷).

% *** user: '計画停電' / 1 ***
計画停電(_年月日) :-
        計画停電(_年月日,L),
        計画停電表示(L).

計画停電表示(L) :-
        append(L0,[_グループ|R],L),
        表示形式の取得(L0,_表示形式),
        営業所並び文字列の取得(_グループ,_営業所並び文字列),
        wr(_表示形式,[_グループ,_営業所並び文字列]),
        R = [].

表示形式の取得(L0,_表示形式) :-
        length(L0,Len),
        表示形式(Len,_表示形式).

表示形式(0,' %t 6:20-10:00; 13:50-17:30; %s\n').
表示形式(1,' %t 9:20-13:00; 16:50-20:30; %s\n').
表示形式(2,' %t 12:20-16:00; %s\n').
表示形式(3,' %t 15:20-19:00; %s\n').
表示形式(4,' %t 17:20-22:00; %s\n').

営業所並び文字列の取得(_グループ,_営業所並び文字列) :-
        findall(_営業所,計画停電グループ所属(_グループ,_営業所),_営業所ならび),        concat_atom(_営業所ならび,',',_営業所並び文字列).

/*
計画停電(_日文字列,L) :-
        atom(_日文字列),
        sub_atom(_日文字列,_,2,_,_日文字列),
        今日(_今日),
        年月日から年月取得(_今日,_年月),
        concat_atom([_年月,_日文字列],_年月日),
        計画停電(_年月日,L),!.
計画停電(_日,L) :-
        integer(_日),
        _日 =< 31,
        今日(_今日),
        年月日から年月取得(_今日,_年月),
        整数から文字列(2,_日,_日文字列),
        concat_atom([_年月,_日文字列],_年月日),
        計画停電(_年月日,L),!.
計画停電(_月日文字列,L) :-
        atom(_月日文字列),
        _月日文字列 @>= '0101',
        _月日文字列 @=< '1231',
        今日(_今日),
        年月日から年取得(_今日,_年),
        concat_atom([_年,_月日文字列],_年月日),
        計画停電(_年月日,L),!.
計画停電(_月日,L) :-
        integer(_月日),
        _月日 >= 101,
        _月日 =< 1231,
        今日(_今日),
        年月日から年取得(_今日,_年),
        整数から文字列(4,_月日,_月日文字列),
        concat_atom([_年,_月日文字列],_年月日),
        計画停電(_年月日,L),!.
*/

計画停電(_年月日,L) :-
        atom(_年月日),
        atom_length(_年月日,8),
        count((日付の発生('20110317',_年月日_1,_年月日), _年月日_1 @>= '20110317' , _年月日_1 @=< _年月日),_経過日数),
        ならびの回転(左方向,_経過日数,[グループ4,グループ5,グループ1,グループ2,グルーブ3],L) .

ならびの回転(左方向,0,L,L) :- !.
ならびの回転(左方向,N,[A|R1],L) :-
        N_1 is N - 1,
        append(R1,[A],L2),
        ならびの回転(左方向,N_1,L2,L).

日付の発生(_日付,_日付,_日付上限) :-
        _日付 @> _日付上限,!,fail.
日付の発生(_日付,_日付,_日付上限).
日付の発生(_日付の一,_日付,_日付上限) :-
        年・月・日に分解(_日付の一,_年の一,_月の一,_日の一),
        翌日(_年の一,_月の一,_日の一,_翌日),
        日付の発生(_翌日,_日付,_日付上限).

年・月・日に分解(_年月日,_年,_月,_日) :-
        sub_atom(_年月日,0,4,_,_年),
        sub_atom(_年月日,4,2,_,_月),
        sub_atom(_年月日,6,2,_,_日).

翌日(_年,'12','31',_翌日) :-
        翌年(_年,_翌年),
        concat_atom([_翌年,'01','01'],_翌日),!.
翌日(_年,_月,'31',_翌日) :-
        append(_,[_月|_],['01','03','05','07','08','10','12']),
        翌月(_月,_翌月),
        concat_atom([_年,_翌月,'01'],_翌日),!.
翌日(_年,_月,'30',_翌日) :-
        append(_,[_月|_],['04','06','09','11']),
        翌月(_月,_翌月),
        concat_atom([_年,_翌月,'01'],_翌日).
翌日(_年,'02','29',_翌日) :-
        concat_atom([_年,'03','01'],_翌日),!.
翌日(_年,'02','28',_翌日) :-
        \+(うるう年(_年)),
        concat_atom([_年,'03','01'],_翌日),!.
翌日(_年,_月,_日,_翌日) :-
        翌日(_日,_翌日の日),
        concat_atom([_年,_月,_翌日の日],_翌日).

翌月(_月,_翌月) :-
        atom_to_term(_月,M,_),
        M2 is M + 1,
        整数から文字列(2,M2,_翌月).

翌年(_年,_翌年) :-
        atom_to_term(_年,Y,_),
        Y2 is Y + 1,
        整数から文字列(4,Y2,_翌年).

翌日(_日,_翌日) :-
        atom_to_term(_日,D,_),
        D2 is D + 1,
        整数から文字列(2,D2,_翌日).

うるう年(_年文字列) :-
        atom(_年文字列),
        atom_to_term(_年文字列,_年整数,_),
        !,
        うるう年(_年整数).
うるう年(_年) :-
        0 is _年 mod 400,!.
うるう年(_年) :-
        0 is _年 mod 100,!,fail.
うるう年(_年) :-
        0 is _年 mod 4,!.
うるう年(_年) :-
        \+(0 is _年 mod 4),
        fail.