このディレクトリの索引
http://pc11.2ch.net/test/read.cgi/db/1252492296/321
#
#  スコアランキングで、自分の上下4人を含めた9人分の情報を取ってきたいのですが、どのようにすればよいでしょうか? 
#  (自分が1位などの場合は自分と下位8人分を取得します) 
#   

スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_自分,L) :-
  findall([_スコア,_氏名],スコア(_氏名,_スコア),L1),
  sort(L1,L2),
  reverse(L2,L3),
  append(L11,[[_スコア,_氏名]|L12],L3),
  自分の最良の席を取る(L11,[_スコア,_自分],L12,L).

自分の最良の席を取る(L11,[_スコア,_自分],L12,L) :-
  length(L12,Len2),Len2 =< 4,
  Len1 is 9 - Len2 - 1,length(L1,Len1),
  append(_,L1,L11),
  append(L1,[[_スコア,自分]|,L12],L),!.

自分の最良の席を取る(L11,[_スコア,_自分],L12,L) :-
  length(L11,Len1),Len1 =< 4,
  Len2 is 9 - Len1 - 1,length(L2,Len2),
  append(Len2,_,L12),
  append(L11,[[_スコア,_自分]|L2],L),!.

自分の最良の席を取る(L11,[_スコア,_自分],L12,L) :-
  length(L1,4),length(L2,4),
  append(_,L1,L11),
  append(L2,_,L12),
  append(L1,[[_スコア,_自分]|L2],L),!.

自分の最良の席を取る(L11,[_スコア,_自分],L12,L) :-
    append(L11,[[_スコア,_自分]|L12],L).