このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1136788500/374
# 問3. M個のデータのうち、その2番目の小さいデータと同じデータの個数を
#    求めるアルゴリズムの流れ図を示せ。 

t702(L,_データ,_個数) :-
    n番目に小さいデータと同じデータの個数(L,2,_データ,_個数).

n番目に小さいデータと同じデータの個数(L,N番目,_データ,_個数) :-
    quicksort(L,L1),
    M is N番目 - 1,
    length(L3,M),
    append(L3,[_データ|R],L1),
    findsum(1,member(_データ,[_データ|R]),_個数).

% *** user: findsum / 3 ***
findsum(_選択項,_項,_合計値) :-
    findall(_選択項,_項,_値ならび),
    加算(_値ならび,_合計値),!.

% *** user: '整数加算' / 2 ***
加算([],0).
加算([N|R],X) :-
    加算(R,Y),
    X is Y + N.

% *** user: quicksort / 2 ***
quicksort([X|Xs],Ys) :-
    partition(Xs,X,Littles,Bigs),
    quicksort(Littles,Ls),
    quicksort(Bigs,Bs),
    append(Ls,[X|Bs],Ys) .
quicksort([],[]).

% *** user: partition / 4 ***
partition([X|Xs],Y,[X|Ls],Bs) :-
    X =< Y,
    partition(Xs,Y,Ls,Bs).
partition([X|Xs],Y,Ls,[X|Bs]) :-
    X > Y,
    partition(Xs,Y,Ls,Bs).
partition([],Y,[],[]).