このディレクトリの索引
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),
  スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_スコア,_自分,L3,L).

スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_スコア,_自分,L3,L) :-
  length(L1,4),
  length(L2,4),
  append(L1,[[_スコア,_自分]|L2],L),
  append(_,L,_,L3),!.
スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_スコア,_自分,L3,L) :-
  list_nth(N,L3,[_スコア,_自分]),
  N < 4,
  length(L,8),
  append(L,_,L3),!.
スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_スコア,_自分,L3,L) :-
  length(L,8),
  append(_,L,L3),!.
スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_スコア,_自分,L,L).