このディレクトリの索引
#  出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1357191974/465
#  お題:与えられた文字列中の各文字数をカウントして表示せよ。 
#  表示順や形式は定めない。 
#   
#  回答例およびチェック用出力例: c 
#  #include <stdio.h> 
#  void check(const char *cs) { 
#   int i, counts[256] = {0}; 
#   for (i = 0; cs[i] != '\0'; i++) counts[cs[i]] += 1; 
#   for (i = 0; i < 256; i++) { 
#    if (counts[i]) printf("'%c'=>%d, ", (char)i, counts[i]); 
#   } 
#  } 
#  int main() { 
#   check("We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris."); 
#   return 0; 
#  } 
#  ↓ 
#  ' '=>16, ','=>2, '.'=>1, ':'=>1, 'W'=>1, 'a'=>7, 'b'=>1, 'c'=>2, 'd'=>2, 'e'=>14 
#  , 'f'=>1, 'g'=>3, 'h'=>3, 'i'=>6, 'l'=>4, 'm'=>3, 'n'=>4, 'o'=>6, 'p'=>3, 'r'=>8 
#  , 's'=>4, 't'=>6, 'u'=>4, 'v'=>2, 'w'=>1, 'y'=>1, 'z'=>1, 
# 
# 

'与えられた文字列中の各文字数をカウントして表示せよ。表示順や形式は定めない。'(_文字列,_各文字数のカウント) :-
        findall(_文字_1,(
                    setof(_文字_1,sub_atom(_文字列,_,1,_,_文字_1),[_文字_1])),
                _重複のない文字ならび),
        findall([_文字,_文字数のカウント],(
                    member(_文字,_重複のない文字ならび),
                    カウント(sub_atom(_文字列,_,1,_,_文字),_文字数のカウント)),
                _各文字数のカウント).

カウント(P,_カウント) :-
        findall(1,P,L),
        length(L,_カウント).