このディレクトリの索引

# 出典:: C/C++の宿題片付けます 127代目 #413 # # 演習 # 今日は友引の火曜日である。今日からN日後までに仏滅ではない日曜日が何日あるか求めるプログラムを作成せよ。 # 六曜:先勝,友引,先負,仏滅,大安,赤口 六曜連鎖(先勝,友引). 六曜連鎖(友引,先負). 六曜連鎖(先負,仏滅). 六曜連鎖(仏滅,大安). 六曜連鎖(大安,赤口). 六曜連鎖(赤口,先勝). 曜日連鎖(月曜,火曜). 曜日連鎖(火曜,水曜). 曜日連鎖(水曜,木曜). 曜日連鎖(木曜,金曜). 曜日連鎖(金曜,土曜). 曜日連鎖(土曜,日曜). 曜日連鎖(日曜,月曜). '今日は大安の木曜日である。今日からN日後までに仏滅ではない日曜日が何日あるか求める。'(_N日後,_何日) :- 仏滅ではない日曜日が何日あるか(0,_N日後,大安,木曜,0,_何日). 仏滅ではない日曜日が何日あるか(_日数_1,_日数限度,_,_,_度数,_度数) :- _日数_1 > _日数限度. 仏滅ではない日曜日が何日あるか(_日数_1,_日数限度,_六曜_1,_曜日_1,_度数_1,_度数) :- '_日数_1が_日数限度以下の間の、仏滅ではない日曜日の度数'(_日数_1,_日数限度,_六曜_1,_曜日_1,_度数_1,_度数). '_日数_1が_日数限度以下の間の、仏滅ではない日曜日の度数'(_日数_1,_日数限度,_六曜_1,_曜日_1,_度数_1,_度数) :- _日数_1 =< _日数限度, '仏滅ではない日曜日の場合だけ、度数を加えて行く'(_日数_1,_日数限度,_六曜_1,_曜日_1,_度数_1,_度数). '仏滅ではない日曜日の場合だけ、度数を加えて行く'(_日数_1,_日数限度,_六曜_1,_曜日_1,_度数_1,_度数) :- '仏滅ではない日曜日の場合だけ、度数を加える'(_六曜_1,_曜日_1,_度数_1,_度数_2), 次の日(_日数_1,_六曜_1,_曜日_1,_日数_2,_六曜_2,_曜日_2), 仏滅ではない日曜日が何日あるか(_日数_2,_日数限度,_六曜_2,_曜日_2,_度数_2,_度数). 次の日(_日数_1,_六曜_1,_曜日_1,_日数_2,_六曜_2,_曜日_2) :- succ(_日数_1,_日数_2), 六曜連鎖(_六曜_1,_六曜_2), 曜日連鎖(_曜日_1,_曜日_2). '仏滅ではない日曜日の場合だけ、度数を加える'(_六曜,_曜日,_度数_1,_度数_2) :- '仏滅ではない日曜日の場合だけ、'(_六曜,_曜日,_度数_1,_度数_2),!. '仏滅ではない日曜日の場合だけ、度数を加える'(_,_,_度数_1,_度数_1). '仏滅ではない日曜日の場合だけ、'(_六曜,日曜,_度数_1,_度数_2) :- 仏滅ではない(_六曜), succ(_度数_1,_度数_2). 仏滅ではない(_六曜) :- \+(_六曜 = 仏滅).