このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1316769778/196
#  PHPでMySQLかsqlite3を使おうと思っています。 
#  表の先頭に新しい行を追加して、行の総数が指定した数(たとえば10)よりも多くなった場合は 
#  多くなった分を表の末尾から削除して行数を一定以上に増やさないようにしたいのですがどうすればいいですか? 
#  ロケット鉛筆みたいに最大数が決まっていてはみ出たら押し出すみたいなことをしたいです。 
#  表の先頭に追加して上限を超えたら最後尾から削除するんじゃなくて 
#  表の最後尾に追加して上限を超えたら先頭から削除するのでもいいです。 
#  どちらのほうが簡単かどうかもわかっていませんがよろしくお願いします。 
# 
# 

'表の先頭に新しい行を追加して、行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して行数を一定以上に増やさないようにしたい'(_テーブル名,_行) :-
        length(_行,_列数),
        '表の先頭に新しい行を追加して'(_テーブル名,_行),
        '行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して'(10,_テーブル名,_列数).

'表の先頭に新しい行を追加して'(_テーブル名,_行) :-
        P =.. [_テーブル|_組み],
        asserta(P),!.

'行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して'(_限界数,_テーブル名,_列数) :-
        length(L,_列数),
        P =.. [_テーブル名|L],
        count(P,_現在の行数),
        '行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して'(_現在の行数,_限界数,_テーブル名,_列数).

'行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して'(_現在の行数,_限界数,_テーブル名,_列数) :-
        _現在の行数 =< _限界数,!.
'行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して'(_現在の行数,_限界数,_テーブル名,_列数) :-
        _現在の行数 > _限界数,
        'retractしながら全行を回収する'(_テーブル名,_列数,_項ならび),
        多くなった分を表の末尾から削除して(_限界数,_項ならび,_末尾を削除された項ならび),
        assertz_all(_末尾を削除されたこうならび).

'retractしながら全行を回収する'(_テーブル名,_列数,_項ならび) :-
        length(L1,_列数),
        P =.. [_テーブル名|L1],
        findall(P,retract(P),_項ならび),!.

多くなった分を表の末尾から削除して(_限界数,_項ならび,_末尾を削除された項ならび) :-
        length(L,_限界数),
        append(_末尾を削除された項ならび,_,_項ならび).

assertz_all([]).
assertz_all([_項|R]) :-
        assertz(_項),
        assertz_all(R).