このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1296387672/181
#  [1] 授業単元:プログラミング C言語  
#  [2] 問題文(含コード&リンク):明治以降の和暦を指定して、西暦に変換するプログラム 
#                  まず元号(M,T,S,H)を数字(1〜4)で選んで年を入力し、 
#                  西暦を表示させる。元号選択時に1〜4以外を選んだら 
#                  エラーメッセージをだして終了させます。 
#   
#  

明治以降の和暦を指定して、西暦に変換するプログラム :-
        '元号をM,T,S,Hで得る'(_元号略記),
        年を得る(_年),
        明治以降の和暦を西暦に変換する(_元号略記,_年,_西暦年),
        write_formatted('%t%t年は西暦%t年となります。\n',[_元号略記,_年,_西暦年).

'元号をM,T,S,Hで得る'(_元号略記) :-
        write('元号を数値で 1..明治 2..大正 3..昭和 4..平成 の左側の数字で入力してください : '),
        get_line(Line),
        元号略記(Line,_元号略記),!.

元号略記(Line,_元号略記) :-
        atom_to_term(Line,_入力番号,_),
        integer(A),
        入力番号から元号略記へ(_入力番号,_元号略記).

入力番号から元号略記へ(1,'M').
入力番号から元号略記へ(2,'T').
入力番号から元号略記へ(3,'S').
入力番号から元号略記へ(4,'H').
入力番号から元号略記へ(X,_) :-
        \+((X>=1,X=<4)),
        write_formatted('入力された%tからは元号が得られませんでした\n',[X]),!,
        fail.

年を得る(_年) :-
        write('年を入力してください : '),
        get_line(Line),
        年を得るの診断(Line,_年),!.

年を得るの診断(Line,_年) :-
        atom_to_term(Line,_年,_),
        integer(_年),!.
年を得るの診断(Line,_年) :-
        write_formatted('入力された %t からは年を得られませんでした\n',[Line]),
        fail.

明治以降の和暦を西暦に変換する('M',_年,_西暦年) :-
        _西暦年 is 1867 + _年,!.
明治以降の和暦を西暦に変換する('T',_年,_西暦年) :-
        _西暦年 is 1911 + _年,!.
明治以降の和暦を西暦に変換する('S',_年,_西暦年) :-
        _西暦年 is 1925 + _年,!.
明治以降の和暦を西暦に変換する('H',_年,_西暦年) :-
        _西暦年 is 1988 + _年,!.