このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1267796762/710
#  【 課題 】 
#  1 から n までの整数の合計を返すメソッドをつくる 
#  【 形態 】Javaアプリケーション(main()で開始) 
#  【 期限 】1/7 
#  【 Ver  】1.6 
#  【 補足 】 
#  n<0の時は-1 + -2 + -3 + -4 + -5 ... +1 =合計 
#  のように合計を求める。 
#  nは符号付きint、合計の戻り値は符号付きlongです。 
#  nはランダムで10万回実行するのにかかる時間が 
#  わかるように表示する。 
#  合計が正確な値なのはnがどの範囲か、不正確である 
#  場合はどのような値が返されるか解答する(例外処理を 
#  入れろということだと思います)。 
# 
# 

'1 から n までの整数の合計を返すメソッドをつくる'(_n,_合計) :-
        _n >= 0,
        '1 から n までの整数の合計を返すメソッドをつくる'(1,_n,0,_合計).
'1 から n までの整数の合計を返すメソッドをつくる'(_n,_合計) :-
        _n < 0,
        '-1 から n までの整数の合計を返すメソッドをつくる'(-1,_n,0,_合計).

'1 から n までの整数の合計を返すメソッドをつくる'(_n,_n,_合計1,_合計) :-
        error_protect(_合計 is _合計1 + _n,エラー表示(_合計 is _合計1 + _n)),!.
'1 から n までの整数の合計を返すメソッドをつくる'(M,_n,_合計1,_合計) :-
        error_protect(_合計2 is _合計1 + M,エラー表示(_合計2 is _合計1 + M)),
        M_2 is M + 1,
        '1 から n までの整数の合計を返すメソッドをつくる'(M_2,_n,_合計2,_合計).

'-1 から n までの整数の合計を返すメソッドをつくる'(_n,_n,_合計1,_合計) :-
        error_protect(_合計 is _合計1 + _n + 1,エラー表示(_合計 is _合計1 + _n + 1)),!.
'-1 から n までの整数の合計を返すメソッドをつくる'(M,_n,_合計1,_合計) :-
        error_protect(_合計2 is _合計1 + M,エラー表示(_合計2 is _合計1 + M)),
        M_1 is M - 1,
        '-1 から n までの整数の合計を返すメソッドをつくる'(M_1,_n,_合計2,_合計).

error_protect(Goal,Handler)
  :-
        exception_handler(Goal,error(E,I),(set_global(exception,(error(E,I),fail)),Handler)).

エラー表示(S is _式) :-
        write_formatted('桁あふれが発生しました。%t\nこれ以後の計算は正しい答えになっていません。\n',[S is _式]),!.

'ランダムで10万回実行するのにかかる時間がわかるように表示する。' :-
        A is time,
        for(1,N,100000),
        _n is random,
        '1 から n までの整数の合計を返すメソッドをつくる'(_n,_合計),
        N = 100000,
        B is time,
        C is B - A,
        write_formatted('10万回の呼び出しにかかった時間は %t 秒です。\n',[C]).