このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1339338438/77
#  [1] 授業単元: 数値解析 
#  [2] 問題文(含コード&リンク): 
#   表示や入力を目的とする関数以外では、関数の中で標準入力や 
#  標準出力への入出力は行わないこと. 
#  西暦の年を引数にとり、うるう年ならば1を返し、そうでないならば0を  
#  返す関数intercalary_year()を作成しなさい。  
#  西暦が4の倍数ならばうるう年である。 
#  ただし、100の倍数ならばうるう年ではなく、 
#  さらに、400の倍数ならばうるう年である。  
#   
#   
#   [3.1] OS:Linux  
#   [3.2] コンパイラ名とバージョン:gcc  
#   [3.3] 言語: c言語  
#  [4] 期限: 6月20日  
#  お手数ですが、よろしくお願いします。 
#   
# 

'西暦の年を引数にとり、うるう年ならば1を返し、そうでないならば0を返す述語 うるう年/2 を作成しなさい。西暦が4の倍数ならばうるう年である。ただし、100の倍数ならばうるう年ではなく、さらに、400の倍数ならばうるう年である。'(_西暦,_診断) :-
        うるう年(_西暦,_診断).

うるう年(_西暦,1) :-
        '西暦が4の倍数ならばうるう年である。ただし、100の倍数ならばうるう年ではなく、さらに、400の倍数ならばうるう年である。'(_西暦),!.
うるう年(_西暦,0).

'西暦が4の倍数ならばうるう年である。ただし、100の倍数ならばうるう年ではなく、さらに、400の倍数ならばうるう年である。'(_西暦) :-
        '西暦が4の倍数ならば'(_西暦),
        'ただし、100の倍数ならばうるう年ではなく'(_西暦),!.
'西暦が4の倍数ならばうるう年である。ただし、100の倍数ならばうるう年ではなく、さらに、400の倍数ならばうるう年である。'(_西暦) :-
        'さらに、400の倍数ならばうるう年である'(_西暦).

'西暦が4の倍数ならば'(_西暦) :-
        0 is _西暦 mod 4.

'ただし、100の倍数ならばうるう年ではなく'(_西暦) :-
        0 is _西暦 mod 100,
        fail.
'ただし、100の倍数ならばうるう年ではなく'(_西暦) :-
        \+(0 is _西暦 mod 100).

'さらに、400の倍数ならばうるう年である'(_西暦) :-
        0 is _西暦 mod 400.