このディレクトリの索引

% *** user: split / 3 ***
% ?- split('a\n\nbc\n',['\n'],X).
%
% X = [a,bc]
%

split(_文字列,_区切り符号ならび,X) :-
    sPlit(_文字列,_区切り符号ならび,Y),
    findall(U,(member(U,Y) , not U = ''),L),
    L = X,
    ! .

% *** user: sPlit / 3 ***
% ?- sPlit('a\n\nbc\n',['\n'],X).
%
% X = [a,'',bc].
%

sPlit(_文字列,_区切り符号ならび,X) :-
    atom_chars(_文字列,L),
    split_00(L,_区切り符号ならび,Y),
    findall(U,(member(U,Y) , not member(U,_区切り符号ならび)),Z),
    Z = X,
    ! .

% *** user: sPLIT / 3 ***
% ?- sPLIT('a\n\nbc\n',['\n'],X).
%
% X = [a,'\n','\n',bc,'\n']
%

sPLIT(_文字列,_区切り符号ならび,X) :-
    'SPLIT'(_文字列,_区切り符号ならび,Y),
    findall(U,(member(U,Y) , not U = ''),L),
    L = X,
    ! .

% *** user: 'SPLIT' / 3 ***
% ?- 'SPLIT'('a\n\nbc\n',['\n'],X).
%
% X = [a,'\n','','\n',bc,'\n'].
%

'SPLIT'(_文字列,_区切り符号ならび,X) :-
    atom_chars(_文字列,L),
    split_00(L,_区切り符号ならび,Z),
    Z = X,
    ! .

% *** user: split_00 / 3 ***
split_00(_文字ならび,_区切り符号ならび,X) :-
    findall([B,A],(member(A,_区切り符号ならび) , atom_chars(A,B)),_区切り符号ならびの二),
    split_0(_文字ならび,_区切り符号ならびの二,X) .

% *** user: split_0 / 3 ***
split_0(_文字ならび,_区切り符号ならび,['',_区切り符号,'']) :-
    member([_区切り文字ならび,_区切り符号],_区切り符号ならび),
    _文字ならび = _区切り文字ならび,
    ! .
split_0(_文字ならび,_区切り符号ならび,['',_区切り符号|R2]) :-
    member([_区切り文字ならび,_区切り符号],_区切り符号ならび),
    append(_区切り文字ならび,R,_文字ならび),
    split_1(R,_区切り符号ならび,R2),
    ! .
split_0(L,_区切り符号ならび,X) :-
    split_1(L,_区切り符号ならび,X) .

% *** user: split_1 / 3 ***
split_1([],_,[]) :-
    ! .
split_1(_文字ならび,_区切り符号ならび,['',_区切り符号,'']) :-
    member([_区切り文字ならび,_区切り符号],_区切り符号ならび),
    _文字ならび = _区切り文字ならび,
    ! .
split_1(_文字ならび,_区切り符号ならび,['',_区切り符号_1,C,_区切り符号_2|X]) :-
    member([_区切り文字ならび,_区切り符号_1],_区切り符号ならび),
    append(_区切り文字ならび,R,_文字ならび),
    split_2(R,R2,_区切り符号_2,_区切り符号ならび,B),
    split_5(B,C),
    split_0(R2,_区切り符号ならび,X),
    ! .
split_1(_文字ならび,_区切り符号ならび,[C|X]) :-
    split_2(_文字ならび,R2,_区切り符号,_区切り符号ならび,B),
    _区切り符号 = '',
    split_5(B,C),
    split_0(R2,_区切り符号ならび,X),
    ! .
split_1(_文字ならび,_区切り符号ならび,[C,_区切り符号|X]) :-
    split_2(_文字ならび,R2,_区切り符号,_区切り符号ならび,B),
    \+(_区切り符号 = ''),
    split_5(B,C),
    split_0(R2,_区切り符号ならび,X),
    ! .

% *** user: split_2 / 5 ***
split_2([],[],'',_,[]) :-
    ! .
split_2(_文字ならび,R,_区切り符号,_区切り符号ならび,[]) :-
    member([_区切り文字ならび,_区切り符号],_区切り符号ならび),
    append(_区切り文字ならび,R,_文字ならび),
    ! .
split_2([''''|R],R2,_区切り符号,_区切り符号ならび,X) :-
    split_3([''''|R],R2,_区切り符号,_区切り符号ならび,X),
    ! .
split_2(['"'|R],R2,_区切り符号,_区切り符号ならび,X) :-
    split_32(['"'|R],R2,_区切り符号,_区切り符号ならび,X),
    ! .
split_2([_文字|R],R2,_区切り符号,_区切り符号ならび,[_文字|X]) :-
    split_2(R,R2,_区切り符号,_区切り符号ならび,X),
    ! .

% *** user: split_3 / 5 ***
split_3(['''',''''|R],R2,_区切り符号,_区切り符号ならび,[''''|X]) :-
    split_4(R,R2,_区切り符号,_区切り符号ならび,X),
    ! .
split_3([_|R],R2,_区切り符号,_区切り符号ならび,X) :-
    split_4(R,R2,_区切り符号,_区切り符号ならび,X),
    ! .

% *** user: split_4 / 5 ***
split_4(['''',''''|R],R2,_区切り符号,_区切り符号ならび,[''''|X]) :-
    split_4(R,R2,_区切り符号,_区切り符号ならび,X),
    ! .
split_4([''''|R],R2,_区切り符号,_区切り符号ならび,X) :-
    split_2(R,R2,_区切り符号,_区切り符号ならび,X),
    ! .
split_4([],[],'',_,[]) :-
    ! .

% *** user: split_4 / 4 ***
split_4([_文字|R],R2,_区切り符号ならび,[_文字|X]) :-
    split_4(R,R2,_区切り符号,_区切り符号ならび,X),
    ! .

% *** user: split_5 / 2 ***
split_5([],'') :-
    ! .
split_5(B,C) :-
    numeric_list(B,Nl),
    number(C,Nl),
    ! .
split_5(B,C) :-
    concat_atom(B,C),
    ! .

% *** user: split_32 / 5 ***
split_32(['"','"'|R],R2,_区切り符号,_区切り符号ならび,[''''|X]) :-
    split_42(R,R2,_区切り符号,_区切り符号ならび,X),
    ! .
split_32([_|R],R2,_区切り符号,_区切り符号ならび,X) :-
    split_42(R,R2,_区切り符号,_区切り符号ならび,X),
    ! .

% *** user: split_42 / 5 ***
split_42(['"','"'|R],R2,_区切り符号,_区切り符号ならび,['"'|X]) :-
    split_42(R,R2,_区切り符号,_区切り符号ならび,X),
    ! .
split_42(['"'|R],R2,_区切り符号,_区切り符号ならび,X) :-
    split_2(R,R2,_区切り符号,_区切り符号ならび,X),
    ! .
split_42([],[],'',_,[]) :-
    ! .

% *** user: split_42 / 4 ***
split_42([_文字|R],R2,_区切り符号ならび,[_文字|X]) :-
    split_42(R,R2,_区切り符号,_区切り符号ならび,X),
    ! .

区切り語ならびの変形(_区切り語ならび,_降順の区切り文字ならびのならび) :-
    sort(_区切り語ならび,_昇順の区切り語ならび),
    reverse(_昇順の区切り語ならび,_降順の区切り語ならび),
    atomList2charsList(_降順の区切り語ならび,_降順の区切り文字ならびのならび).

atomList2charsList([],[]) :- !.
atomList2charsList([A|R1],[L|R2]) :-
    atom_chars(A,L),
    atomList2charsList(R1,R2).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

concat_atom([A],A) :- !.
concat_atom([A|R],X) :-
    concat_atom(R,Y),
    atom_concat(A,Y,X).

concat_atom([A],Spliter,A) :- !.
concat_atom([A|R],Spliter,X) :-
    concat_atom(R,Spliter,Y),
    atom_concat(A,Spliter,Z),
    atom_concat(Z,Y,X).