このディレクトリの索引

# 1)西暦年から11を引き、その値を19で割った余りを求め、11を掛ける。 # 2)月の値から、以下の表に従って値を求める。 # 月 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 # 値 0 2 0 2 2 4 5 6 7 8 9 10 # このうち6月までの値を「おにおににし」と覚える、と、多くの暦解説書に書かれている。 # 上記1),2)の値と日の値をそれぞれ加える。 # 求めた値を30で割った余りが、その日のおおよその月齢である。 # 但し、最大2程度の誤差がある。 以下はこれを数式化したものである。 # y年m月d日の月齢a日を求める。 # 但し、%は剰余演算子とし、c(m)は上の表に従った定数とする。例、62%30=2、c(5)=2。 おにおににし(1,0). おにおににし(2,2). おにおににし(3,0). おにおににし(4,2). おにおににし(5,2). おにおににし(6,4). おにおににし(7,5). おにおににし(8,6). おにおににし(9,7). おにおににし(10,8). おにおににし(11,9). おにおににし(12,10). '月齢・月相'(1,朔). '月齢・月相'(1,新月). '月齢・月相'(2,既朔). '月齢・月相'(3,三日月). '月齢・月相'(4,''). '月齢・月相'(5,''). '月齢・月相'(6,''). '月齢・月相'(7,上弦). '月齢・月相'(8,上弦). '月齢・月相'(9,''). '月齢・月相'(10,''). '月齢・月相'(11,''). '月齢・月相'(12,''). '月齢・月相'(13,十三夜). '月齢・月相'(14,小望月). '月齢・月相'(15,望). '月齢・月相'(15,満月). '月齢・月相'(15,望月). '月齢・月相'(16,十六夜). '月齢・月相'(16,既望). '月齢・月相'(17,立待月). '月齢・月相'(18,居待月). '月齢・月相'(19,寝待月). '月齢・月相'(19,臥待月). '月齢・月相'(20,更待月). '月齢・月相'(21,''). '月齢・月相'(22,下弦). '月齢・月相'(23,下弦). '月齢・月相'(24,''). '月齢・月相'(25,''). '月齢・月相'(26,''). '月齢・月相'(27,''). '月齢・月相'(28,''). '月齢・月相'(29,晦). '月齢・月相'(30,晦). 月相(_年,_月,_日,_おおよその月相) :- '年、月、日がどれかが整数ではなく文字列の場合は、年、月、日、全てを整数に変換して、月相を問う'(_年,_月,_日,_おおよその月相),!. 月相(_年整数,_月整数,_日整数,_おおよその月相) :- '年月日が整数の場合、おおよその月齢を求め、対応する月相を得る。月齢に対応する月相がない場合もある。'(_年整数,_月整数,_日整数,_おおよその月相). '年、月、日がどれかが整数ではなく文字列の場合は、年、月、日、全てを整数に変換して、月相を問う'(_年,_月,_日,_おおよその月相) :- '年、月、日がどれかが整数ではなく文字列の場合は、年、月、日、全てを整数に変換して、'(_年,_月,_日,_年整数,_月整数,_日整数), '年、月、日が整数の場合の月相'(_年整数,_月整数,_日整数,_おおよその月相). '年月日が整数の場合、おおよその月齢を求め、対応する月相を得る。月齢に対応する月相がない場合もある。'(_年整数,_月整数,_日整数,_おおよその月相) :- '年、月、日が整数の場合の月相'(_年整数,_月整数,_日整数,_おおよその月相). '年、月、日が整数の場合の月相'(_年整数,_月整数,_日整数,_おおよその月相) :- 月齢(_年整数,_月整数,_日整数,_おおよその月齢), '月齢・月相'(_おおよその月齢,_おおよその月相). 月齢(_年整数,_月整数,_日整数,_おおよその月齢) :- 年月日範囲検査(_年整数,_月整数,_日整数), '1)西暦年から11を引き、その値を19で割った余りを求め、11を掛ける。 2)月の値から、以下の表に従って値を求める。 月 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 値 0 2 0 2 2 4 5 6 7 8 9 10 このうち6月までの値を「おにおににし」と覚える、と、多くの暦解説書に書かれている。 上記1),2)の値と日の値をそれぞれ加える。 求めた値を30で割った余りが、その日のおおよその月齢である。'(_年整数,_月整数,_日整数,_おおよその月齢). '1)西暦年から11を引き、その値を19で割った余りを求め、11を掛ける。 2)月の値から、以下の表に従って値を求める。 月 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 値 0 2 0 2 2 4 5 6 7 8 9 10 このうち6月までの値を「おにおににし」と覚える、と、多くの暦解説書に書かれている。 上記1),2)の値と日の値をそれぞれ加える。 求めた値を30で割った余りが、その日のおおよその月齢である。'(_年整数,_月整数,_日整数,_おおよその月齢) :- '1)西暦年から11を引き、その値を19で割った余りを求め、11を掛ける。'(_年整数,_1), '2)月の値から、以下の表に従って値を求める。 月 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 値 0 2 0 2 2 4 5 6 7 8 9 10 このうち6月までの値を「おにおににし」と覚える、と、多くの暦解説書に書かれている。'(_月整数,_2), '上記1),2)の値と日の値をそれぞれ加える。 求めた値を30で割った余りが、その日のおおよその月齢である。'(_1,_2,_日整数,_おおよその月齢). '1)西暦年から11を引き、その値を19で割った余りを求め、11を掛ける。'(_年整数,_1) :- _1 is ((_年整数 - 11) mod 19) * 11. '2)月の値から、以下の表に従って値を求める。 月 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 値 0 2 0 2 2 4 5 6 7 8 9 10 このうち6月までの値を「おにおににし」と覚える、と、多くの暦解説書に書かれている。'(_月整数,_2) :- おにおににし(_月整数,_2). '上記1),2)の値と日の値をそれぞれ加える。 求めた値を30で割った余りが、その日のおおよその月齢である。'(_1,_2,_日整数,_おおよその月齢) :- _おおよその月齢 is (_1 + _2 + _日整数) mod 30. 年月日範囲検査(_年整数,_月整数,_日整数) :- 年月が存在する(_年整数,_月整数), 日が存在する(_年整数,_月整数,_日整数). 年月が存在する(_年整数,_月整数) :- between(1900,2099,_年整数), between(1,12,_月整数). 日が存在する(_年整数,_月整数,_日整数) :- 月末日整数(_年整数,_月整数,_月末日整数), between(1,_月末日整数,_日整数). 月末日整数(_年整数,2,29) :- うるう年(_年整数). 月末日整数(_年整数,2,28) :- \+(うるう年(_年整数)). 月末日整数(_年整数,_月整数,30) :- member(_月整数,[4,6,9,11]). 月末日整数(_年整数,_月整数,31) :- member(_月整数,[1,3,5,7,8,10,12]). うるう年(_年整数) :- '_年整数が400で割り切れる年は無条件でうるう年であるが、これらの年を除いた中で、4で割り切れてかつ100で割り切れない年もうるう年である。'(_年整数). '_年整数が400で割り切れる年は無条件でうるう年であるが、これらの年を除いた中で、4で割り切れてかつ100で割り切れない年もうるう年である。'(_年整数) :- '_年整数が400で割り切れる年は無条件でうるう年であるが、'(_年整数),!. '_年整数が400で割り切れる年は無条件でうるう年であるが、これらの年を除いた中で、4で割り切れてかつ100で割り切れない年もうるう年である。'(_年整数) :- 'これらの年を除いた中で、4で割り切れてかつ100で割り切れない年もうるう年である。'(_年整数). '_年整数が400で割り切れる年は無条件でうるう年であるが、'(_年整数) :- 0 is _年整数 mod 400. 'これらの年を除いた中で、4で割り切れてかつ100で割り切れない年もうるう年である。'(_年整数) :- 0 is _年整数 mod 4, \+(0 is _年整数 mod 100). '年、月、日がどれかが整数ではなく文字列の場合は、年、月、日、全てを整数に変換して、'(_年,_月,_日,_年整数,_月整数,_日整数) :- '年、月、日がどれかが整数ではなく文字列の場合は、'(_年,_月,_日), '年、月、日、全てを整数に変換して、'(_年,_月,_日,_年整数,_月整数,_日整数). '年、月、日がどれかが整数ではなく文字列の場合は、'(_年,_月,_日) :- (atom(_年);atom(_月);atom(_日)),!. '年、月、日、全てを整数に変換して、'(_年,_月,_日,_年整数,_月整数,_日整数) :- 年を整数に変換する(_年,_年整数), 月を整数に変換する(_月,_月整数), 日を整数に変換する(_日,_日整数). 年を整数に変換する(_年,_年整数) :- '第一引数が文字列だった場合は整数に変換して第二引数と単一化する。整数の場合はそのまま第二引数と単一化する。'(_年,_年整数). 月を整数に変換する(_月,_月整数) :- '第一引数が文字列だった場合は整数に変換して第二引数と単一化する。整数の場合はそのまま第二引数と単一化する。'(_月,_月整数). 日を整数に変換する(_日,_日整数) :- '第一引数が文字列だった場合は整数に変換して第二引数と単一化する。整数の場合はそのまま第二引数と単一化する。'(_日,_日整数). '第一引数が文字列だった場合は整数に変換して第二引数と単一化する。整数の場合はそのまま第二引数と単一化する。'(_文字列,_整数) :- '第一引数が文字列だった場合は整数に変換して第二引数と単一化する。'(_文字列,_整数),!. '第一引数が文字列だった場合は整数に変換して第二引数と単一化する。整数の場合はそのまま第二引数と単一化する。'(_整数,_整数) :- '第一引数が整数の場合はそのまま第二引数と単一化する。'(_整数). '第一引数が文字列だった場合は整数に変換して第二引数と単一化する。'(_文字列,_整数) :- atom(_文字列), atom_number(_文字列,_整数). '第一引数が整数の場合はそのまま第二引数と単一化する。'(_整数) :- integer(_整数).