このディレクトリの索引

http://pc11.2ch.net/test/read.cgi/db/1269585561/10
# ある会社では有給の最大取得可能日数を申請日の前年同日の翌日から申請日までに
# 取得した有給日数の合計としています。しかしこの有給日数は欠勤や遅刻、早退に
# よって減価します。この場合はマイナスの日数として入力されています。
# 一年以上前の取得有給日数は無効になるルールで有給の最大取得可能日数を示す
# プログラムを書きなさい。
#
# 有給テーブル
# 個人ID
# 取得日
# 日数
# 摘要
#

申請日の前年同日の翌日から申請日までに取得した有給日数の合計(_個人ID,_申請日,_有給の最大取得日数) :-
      前年同日(_申請日,_前年同日),
      findsum(_日数,(
                    有給テーブル(_個人ID,_取得日,_日数,_),
                    _取得日 @> _前年同日,
                    _取得日 @=< _申請日),
              _有給の最大取得日数).

前年同日(_今日,_前年同日) :-
        sub_atom(_今日,4,4,_,'0229'),
        前年(_今日,_前年),
        concat_atom([_前年,'0228'],_前年同日),!.
前年同日(_今日,_前年同日) :-
        前年(_今日,_前年),
        sub_atom(_今日,_月日),
        concat_atom([_前年,_月日],_前年同日),!.

前年(_今日,_前年) :-
        sub_atom(_今日,0,4,_,_今年),
        atom_to_term(_今年,_今年整数,_),
        _前年整数 is _今年整数 - 1,
        swritef(_前年,'%t',[_前年整数]).