このディレクトリの索引

# 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。 月名(_年整数,_月整数,_日整数,_月名) :- 月齢(_年整数,_月整数,_日整数,_月齢), '月齢・月名'(_月齢,_月名). 月齢(_年整数,_月整数,_日整数,_月齢) :- 年月日範囲検査(_年整数,_月整数,_日整数), 月齢の月係数(_月整数,_月係数), _月齢 is (((_年整数 - 11) mod 19) * 11 + _月係数 + _日整数) mod 30. 年月日範囲検査(_年整数,_月整数,_日整数) :- 年月が存在する(_年整数,_月整数), 日が存在する(_年整数,_月整数,_日整数). 年月が存在する(_年整数,_月整数) :- between(1900,2099,_年整数), between(1,12,_月整数). 日が存在する(_年整数,_月整数,_日整数) :- 月末日整数(_年整数,_月整数,_月末日整数), between(1,_月末日整数,_日整数). 月齢の月係数(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,三日月). '月齢・月名'(7,上弦). '月齢・月名'(8,上弦). '月齢・月名'(13,十三夜). '月齢・月名'(14,小望月). '月齢・月名'(15,望). '月齢・月名'(15,満月). '月齢・月名'(15,望月). '月齢・月名'(16,十六夜). '月齢・月名'(16,既望). '月齢・月名'(17,立待月). '月齢・月名'(18,居待月). '月齢・月名'(19,寝待月). '月齢・月名'(19,臥待月). '月齢・月名'(20,更待月). '月齢・月名'(22,下弦). '月齢・月名'(23,下弦). '月齢・月名'(29,晦). '月齢・月名'(30,晦). 月末日整数(_年整数,2,29) :- うるう年(_年整数). 月末日整数(_年整数,2,28) :- \+(うるう年(_年整数)). 月末日整数(_年整数,_月整数,30) :- member(_月整数,[4,6,8,10]). 月末日整数(_年整数,_月整数,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).