このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/334
#  {1] 授業単元:プログラミング演習 
#  [2] 問題文: 
#  http://ime.nu/codepad.org/4r1e9DdC 
#  上記のransuu関数を用いて、以下のような数当てゲームプログラムを作成せよ。 
#  このプログラムはmain関数とransuu関数からなるプログラム。 
#  1) 1から100までの整数乱数を1つ発生させる。 
#  2) 利用者に1から100までのある整数を入力してもらう。 
#  3) 発生した乱数と入力した数が同じなら"当り"、乱数の方が入力した数よりも大きければ"もっと大きい"、乱数の方が入力した数よりも小さければ"もっと小さい"、と表示する。
#  4) 数を当てることができなかった場合には、もう一度数を入力してもらう。 
#  5) 6回以内に当たった場合には"あなたの勝ち"と表示して終了。6回続けて外れた場合には"あなたの負け"と表示して終了。 
#  

数当てゲームプログラム :-
        '1) 1から100までの整数乱数を1つ発生させる。'(_1から100までの整数乱数),
        数当てゲームプログラム([],_1から100までの整数乱数,_).

数当てゲームプログラム(_試行回数,_1から100までの整数乱数,_診断) :-
        \+(var(_診断)),
        '5) 6回以内に当たった場合には"あなたの勝ち"と表示して終了。6回続けて外れた場合には"あなたの負け"と表示して終了。'(_試行回数,_診断),!.
数当てゲームプログラム(_試行回数,_1から100までの整数乱数,_) :-
        '2) 利用者に1から100までのある整数を入力してもらう。'(_利用者が入力する1から100までのある整数),
        '3) 発生した乱数と入力した数が同じなら"当り"、乱数の方が入力した数よりも大きければ"もっと大きい"、乱数の方が入力した数よりも小さければ"もっと小さい"、と表示する。'(_1から100までの整数乱数,_利用者が入力する1から100までの整数),
        '4) 数を当てることができなかった場合には、もう一度数を入力してもらう。'(_診断,_利用者が入力する1から100までのある整数),
        数当てゲームプログラム([_|_試行回数],_1から100までの整数乱数,_診断),

'1) 1から100までの整数乱数を1つ発生させる。'(_1から100までの整数乱数) :-
        _1から100までの整数乱数 is random(100) + 1.

'2) 利用者に1から100までのある整数を入力してもらう。'(_利用者が入力する1から100までのある整数) :-
        write('1から100までの整数を入力してください : '),
        get_line(Line),
        '1から100までの整数入力診断'(Line,_利用者が入力する1から100までのある整数),!.
'2) 利用者に1から100までのある整数を入力してもらう。'(_利用者が入力する1から100までのある整数) :-
        '2) 利用者に1から100までのある整数を入力してもらう。'(_利用者が入力する1から100までのある整数).

'1から100までの整数入力診断'(Line,_利用者が入力する1から100までのある整数) :-
        atom_to_term(Line,_利用者が入力する1から100までのある整数,_),
        integer(_利用者が入力する1から100までのある整数), 
        _利用者が入力する1から100までのある整数 >= 1,
        _利用者が入力する1から100までのある整数 =< 100,!.

'1から100までの整数入力診断'(Line,_利用者が入力する1から100までのある整数) :-
        writef('入力された %t からは1から100までの整数が得られません。\n',[Line]),
        fail.

'3) 発生した乱数と入力した数が同じなら"当り"、乱数の方が入力した数よりも大きければ"もっと大きい"、乱数の方が入力した数よりも小さければ"もっと小さい"、と表示する。'(_数,_数) :-
        write('当り\n').
'3) 発生した乱数と入力した数が同じなら"当り"、乱数の方が入力した数よりも大きければ"もっと大きい"、乱数の方が入力した数よりも小さければ"もっと小さい"、と表示する。'(_発生した乱数,_入力した数) :-
        _発生した乱数 > _入力した数,
        write('もっと大きい\n').
'3) 発生した乱数と入力した数が同じなら"当り"、乱数の方が入力した数よりも大きければ"もっと大きい"、乱数の方が入力した数よりも小さければ"もっと小さい"、と表示する。'(_発生した乱数,_入力した数) :-
        _発生した乱数 < _入力した数,
        write('もっと小さい\n').

'4) 数を当てることができなかった場合には、もう一度数を入力してもらう。'(当り,_) :- !.
'4) 数を当てることができなかった場合には、もう一度数を入力してもらう。'(_診断,_利用者が入力する1から100までのある整数) :-
        \+(_診断 = 当り),
        fail.

'もう一度数を入力してもらう。'(_利用者が入力する1から100までのある整数) :-
        '2) 利用者に1から100までのある整数を入力してもらう。'(_利用者が入力する1から100までのある整数).

'5) 6回以内に当たった場合には"あなたの勝ち"と表示して終了。6回続けて外れた場合には"あなたの負け"と表示して終了。'(_,当り) :-
        write('あなたの勝ち\n'),!.
'5) 6回以内に当たった場合には"あなたの勝ち"と表示して終了。6回続けて外れた場合には"あなたの負け"と表示して終了。'([_,_,_,_,_,_],_) :-
        write('あなたの負け\n'),!.