このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1274791771/773
#  sqlite3を使用しています。 
#  並び変えたデータの100番目以降を消したいのですが方法が見つかりません。 
#  どなたか分かる方がいましたらよろしくお願いします。 
#   
#  delete from TableName where KEY_COLUMN in (select KEY_COLUMN from TableName order by ORDER_COLUMN limit -1 offset 100);
# 

'定義節のN番目以降をすべて削除する'(N番目,_述語名/_アリティ) :-
        定義節をならびに写し取る(_述語名/_アリティ,_定義節ならび),
        先頭からN番目の節までを切り取る(N番目,_定義節ならび,_先頭からN番目までの定義節ならび),
        一旦述語定義を解消する(_述語名/_アリティ),
        述語を定義し直す(_先頭からN番目までの定義節ならび),!.

定義節をならびに写し取る(_述語名/_アリティ,_定義節ならび) :-
        length(L,_アリティ),
        P =.. [_述語名|L],
        findall([(P :- Q),Varlist],(
                    clause_with_names(P,Q,Varlist)),
                _定義節ならび),!.

先頭からN番目の節までを切り取る(N番目,_定義節ならび,_先頭からN番目までの定義節ならび) :-
        length(_先頭からN番目までの定義節ならび,N番目),
        append(_先頭からN番目までの定義節ならび,_,_定義節ならび),!.

一旦述語定義を解消する(_述語名/_アリティ) :-
        abolish(_述語名/_アリティ).

述語を定義し直す(先頭からN番目までの定義節ならび) :-
        append(_,[[(P :- Q),Varlist]|R],_先頭からN番目までの定義節ならび),
        assertz_with_names((P :- Q),Varlist),
        R = [].