このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1248012902/196
# 【 課題 】 
# 1. 
# キーボードから次々に非負整数の入力を受け付け、
# それらの中での正の最小値を表示するプログラムを作成せよ。 
# データ入力の終わりは負の整数の入力とする。 
# 2. 
# キーボードから次々に非負整数の入力を受け付け、
# それらの中での(正の)偶数、奇数、ゼロが 
# それぞれ何個ずつであったのかを*の数で表示するプログラムを作成せよ。 
# データ入力の終わりは負の整数の入力とする。 

t665(1) :-
    最初の非負整数を得る(N),
    正の最小値を表示する(N,N).

最初の非負整数を得る(N) :- repeat,get_line(X),atom_to_term(X,N,_),N >= 0,!.

正の最小値を表示する(N,_現在までの最小値) :- N < 0,!,write_formatted('最小値 = %t\n',[_現在までの最小値]).
正の最小値を表示する(N,_現在までの最小値) :-
    N < _現在までの最小値,
    整数を得る(M),
    正の最小値を表示する(M,N).
正の最小値を表示する(N,_現在までの最小値) :-
    N >= _現在までの最小値,
    整数を得る(M),
    正の最小値を表示する(M,_現在までの最小値).

整数を得る(N) :-
    repeat,
    get_line(X),
    atom_to_term(X,N,_),
    integer(N),!.

t665(2) :-
    最初の非負整数を得る(N),
    偶数、奇数、ゼロがそれぞれ何個あったか(N,0,0,0).

偶数、奇数、ゼロがそれぞれ何個あったか(N,_偶数の個数,_奇数の個数,_0の個数) :-
    N < 0,!,
    write_formatted('偶数 %t個,奇数 %t個,ゼロ %t個\n',[_偶数の個数,_奇数の個数,_0の個数]).
偶数、奇数、ゼロがそれぞれ何個あったか(0,_偶数の個数,_奇数の個数,_0の個数) :-
    整数を得る(M),
    _新しい0の個数 is _0の個数 + 1,
    偶数、奇数、ゼロがそれぞれ何個あったか(M,_偶数の個数,_奇数の個数,_新しい0の個数),!.
偶数、奇数、ゼロがそれぞれ何個あったか(N,_偶数の個数,_奇数の個数,_0の個数) :-
    0 is N mod 2,
    整数を得る(M),
    _新しい偶数の個数 is _偶数の個数 + 1,
    偶数、奇数、ゼロがそれぞれ何個あったか(M,_新しい偶数の個数,_奇数の個数,_0の個数),!.
偶数、奇数、ゼロがそれぞれ何個あったか(N,_偶数の個数,_奇数の個数,_0の個数) :-
    1 is N mod 2,
    整数を得る(M),
    _新しい奇数の個数 is _奇数の個数 + 1,
    偶数、奇数、ゼロがそれぞれ何個あったか(M,_偶数の個数,_新しい奇数の個数,_0の個数),!.