このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1086272325/686
#  範囲を扱うのに適したデータ構造ってありますか 
#  こんな感じ 
#   
#  和集合 
#   [1-4]と[2-5]を混ぜると[1-5] 
#   [1-2,5-6,8-10]と[3-4,11-13]を混ぜると[1-6,8-10,11-13] 
#  差集合 
#   [1-10]から[3-4]を削除して[1-2,5-10] 
#  検索 
#   [1-10,20-30]から15を探す 
#   
#  わりと利用価値はあると思うんですが 
#  こういうのってないですかね? 
# 

範囲検索([[_開始点,_終了点]],_検索点) :-
        _検索点 @>= _開始点,
        _検索点 @=< _終了点.

和範囲([[_開始点_1,_終了点_1]],[[_開始点_2,_終了点_2]],[[_開始点_1,_終了点_1]]) :-
        _開始点_2 @>= _開始点_1,
        _終了点_2 @=< _終了点_1.
和範囲([[_開始点_1,_終了点_1]],[[_開始点_2,_終了点_2]],[[_開始点_2,_終了点_2]]) :-
        _開始点_2 @=< _開始点_1,
        _終了点_2 @>= _終了点_1.
和範囲([[_開始点_1,_終了点_1]],[[_開始点_2,_終了点_2]],[[_開始点_1,_終了点_2]]) :-
        _開始点_2 @>= _開始点_1,
        _終了点_2 @>= _終了点_1.
和範囲([[_開始点_1,_終了点_1]],[[_開始点_2,_終了点_2]],[[_開始点_2,_終了点_1]]) :-
        _開始点_2 @=< _開始点_1,
        _終了点_2 @=< _終了点_1.

補範囲(_範囲_1,_範囲_2,_補範囲) :-
         和範囲([[_開始点_1,_終了点_1]],[[_開始点_2,_終了点_2]],_和範囲),
         差範囲(_和範囲,[[_開始点_2,_終了点_2]],_補範囲).

差範囲([[_開始点_1,_終了点_1]],[[_開始点_2,_終了点_2]],[[_開始点_1,_開始点_2],[_終了点_2,_終了点_1]]) :-
        _開始点_2 @>= _開始点_1,
        _終了点_2 @=< _終了点_1.
差範囲([[_開始点_1,_終了点_1]],[[_開始点_2,_終了点_2]],[[_開始点_2,_開始点_1],[_終了点_1,_終了点_2]]) :-
        _開始点_2 @=< _開始点_1,
        _終了点_2 @>= _終了点_1.