このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1354070278/434
#  [1] C言語  
#  [2] 1) codepad.org/u1WNoZPtの関数と反対の動作をする関数、 
#      及び二つの関数の動作確認が出来るmain関数を作成せよ。 
#    2) キーボードから入力されたアルファベット及び数字の数を数えて、 
#      少ないほうを消去するプログラムを作成せよ。 
#      ただし、同数の場合は両方とも消去する。 
#  [3.1] Windows7   
#  [3.3] C言語 
#  [4] 12/19 19時まで  
#  [5] 特になし 
# 
# 

'キーボードから入力されたアルファベット及び数字の数を数えて、少ないほうを消去するプログラムを作成せよ。ただし、同数の場合は両方とも消去する。'(_残った文字列) :-
        'キーボードから入力された'(_文字列),
        'アルファベット及び数字の数を数えて'(_文字列,_アルファベットの数,_数字の数),
        '少ないほうを消去する。ただし、同数の場合は両方とも消去する。'(_文字列,_アルファベットの数,_数字の数,_残った文字列).

'キーボードから入力された'(_文字列) :-
        write('アルファベットと数字だけからなる文字列を入力してください : '),
        get_line(_文字列).

'アルファベット及び数字の数を数えて'(_文字列,_アルファベットの数,_数字の数) :-
        count((sub_atom(_文字列,_,1,_,_文字),アルファベット(_文字)),_アルファベットの数),
        count((sub_atom(_文字列,_,1,_,_文字),数字(_文字)),_アルファベットの数).

アルファベット(_文字) :-
        _文字 @>= 'A',
        _文字 @=< 'Z'.
アルファベット(_文字) :-
        _文字 @>= 'a',
        _文字 @=< 'z'.

数字(_文字) :-
        _文字 @>= '0',
        _文字 @=< '9'.

'少ないほうを消去する。ただし、同数の場合は両方とも消去する。'(_文字列,_アルファベットの数,_数字の数,_残った文字列) :-
        少ないほうを消去する。(_文字列,_アルファベットの数,_数字の数,_残った文字列).
'少ないほうを消去する。ただし、同数の場合は両方とも消去する。'(_文字列,_アルファベットの数,_数字の数,_残った文字列) :-
        'ただし、同数の場合は両方とも消去する。'(_文字列,_アルファベットの数,_数字の数,_残った文字列).

'少ないほうを消去する。'(_文字列,_アルファベットの数,_数字の数,_残った文字列) :-
        _アルファベット < _数字の数,
        アルファベットを消去する(_文字列,_残った文字列).
'少ないほうを消去する。'(_文字列,_アルファベットの数,_数字の数,_残った文字列) :-
        _アルファベット > _数字の数,
        数字を消去する(_文字列,_残った文字列).

'ただし、同数の場合は両方とも消去する。'(_文字列,_アルファベットの数,_数字の数,_残った文字列) :-
        _アルファベット = _数字の数,
        両方とも消去する(_文字列,_残った文字列).

アルファベットを消去する(_文字列,_残った文字列) :-
        findall(_文字,(
                    sub_atom(_文字列,_,1,_,_文字),
                    \+(アルファベット(_文字))),
                _残った文字ならび),
        atom_chars(_残った文字列,_残った文字ならび).

数字を消去する(_文字列,_残った文字列) :-
        findall(_文字,(
                    sub_atom(_文字列,_,1,_,_文字),
                    \+(数字(_文字))),
                _残った文字ならび),
        atom_chars(_残った文字列,_残った文字ならび).

両方とも消去する(_文字列,_残った文字列) :-
        findall(_文字,(
                    sub_atom(_文字列,_,1,_,_文字),
                    \+(数字(_文字)),
                    \+(アルファベット(_文字))),
                _残った文字ならび),
        atom_chars(_残った文字列,_残った文字ならび).

count(P,Count) :-
        findall(1,P,L),
        length(L,Count).