- 104 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 09:20:30 ]
- >>102 書き直し。
% Prolog 'カラムとして、電話番号と氏名を持つ電話帳テーブルがある。この中で同姓同名が最も多い氏名'(_氏名ならび) :- findall(_氏名,clause(電話帳(_,_氏名),_),_氏名ならび), quicksort(_氏名ならび,_整列された氏名ならび), 同姓同名が最も多いもの(_整列された氏名ならび,0,[],_氏名ならび). 同姓同名が最も多いもの(_整列された氏名ならび,_これまでの最大数,_氏名ならび1,_氏名ならび). 整列された氏名ならび=[A|R1], 要素の連続数(1,A,R1,X,R2), 最大値は(A,X,_これまでの最大値,_更新された最大値,_氏名ならび1,_氏名ならび2), 同姓同名が最も多いもの(R2,_更新された最大値,_氏名ならび2,_氏名ならび),!. 同姓同名が最も多いもの(_,_,_氏名ならび,_氏名ならび). 最大値は(_氏名,X,_これまでの最大値,X,_氏名ならび,[_氏名]) :- X @> _これまでの最大値,!. 最大値は(_氏名,X,_これまでの最大値,X,_氏名ならび,[_氏名|_氏名ならび]) :- X = _これまでの最大値,!. 最大値は(_,_,_これまでの最大値,_これまでの最大値,_氏名ならび,_氏名ならび). 要素の連続数(X,A,[],X,[]) :- !. 要素の連続数(X,A,[B|R],X,[B|R]) :- \+(A==B),!. 要素の連続数(M,A,[A|R1],X,R) :- M2 is M + 1,要素の連続数(M2,A,R1,X,R).
|

|