このディレクトリの索引

#  長いならびLがあります。このならびの中にSL0という部分ならびがあり、
#  その後にSL2という部分ならびがあります。
#  SL0とSL2に挟まれた部分ならびSL1には、SL0,SL2が部分ならびとして存在しない時、
#  ならびLのの先頭からSL1の終わりまでとSL1、SL2の初めからならびLの終わりまでの
#  3つの部分ならびL0,SL1,L2を取り出しなさい。

'長いならびLがあります。このならびの中にSL0という部分ならびがあり、その後にSL2という部分ならびがあります。SL0とSL2に挟まれた部分ならびL1には、SL0,SL2が部分ならびとして存在しない時、ならびLのの先頭からL0の終わりまでと、L1、SL2の初めからならびLの終わりまでの3つの部分ならびL0,L1,L2を取り出しなさい。'(L,SL0,SL2,L0,L1,L2) :-
         append(SL0,R0,SL0_1),
         append(SL2,_,SL2_1),
         '指定部分ならびの終わりまで読み飛ばす'(L,SL0_1,L0,R0),
         '指定部分ならびの前まで読み飛ばす'(R0,SL2_1,L1,L2).

'指定部分ならびの終わりまで読み飛ばす'([],_,[],[]) :- !.
'指定部分ならびの終わりまで読み飛ばす'(L1,L1,[],R) :- !.
'指定部分ならびの終わりまで読み飛ばす'([A|R1],L1,[A|R2],R) :-
        '指定部分ならびの終わりまで読み飛ばす'(R1,L1,R2,R).

'指定部分ならびの前まで読み飛ばす'([],_,[],[]) :- !.
'指定部分ならびの前まで読み飛ばす'(L1,L1,[],L1) :- !.
'指定部分ならびの前まで読み飛ばす'([A|R1],L1,[A|R2],R) :-
        '指定部分ならびの前まで読み飛ばす'(R1,L1,R2,R).

ならびの狭間(_ならび,_前方のはさみならび,_後方のはさみならび,_前ならび,_狭間ならび,_後ならび) :-
        search_part_list(_ならび,_前方のはさみならび,_後方のはさみならび,_前ならび,_狭間ならび,_後ならび).

search_part_list(L,SL0,SL2,L0,L1,L2) :-
         append(SL0,R0,SL0_1),
         append(SL2,_,SL2_1),
         partition_list_1(L,SL0_1,L0,R0),
         partition_list_2(R0,SL2_1,L1,L2).

partition_list(L1,_指定ならび,L,R) :-
        append(_指定ならび,R1,_指定ならび_1),
        partition_list_1(L1,_指定ならび_1,LX,R).

partition_list_1([],_,[],[]) :- !.
partition_list_1(L1,L1,L3,R) :-
        append(L3,R,L1),!.
partition_list_1([A|R1],L1,[A|R2],R) :-
        partition_list_1(R1,L1,R2,R).

partition_list_2([],_,[],[]) :- !.
partition_list_2(L1,L1,[],L1) :- !.
partition_list_2([A|R1],L1,[A|R2],R) :-
        partition_list_2(R1,L1,R2,R).