このディレクトリの索引
% ユーティリティ述語 sub_atom/10 sub_atom/4 sub_atom_list/4 の提案
%
% A .. 文字列 (atom)
% S .. 検索文字列開始変位 (integer)
% L .. 検索文字列の長さ (integer)
% R .. 残り長さ (integer)
% H .. 検索文字列より前側の文字列 (atom)
% X .. 検索文字列 (atom)
% T .. 検索文字列より後の残り文字列 (atom)
% HL .. 検索文字列より前側の文字ならび (chars)
% XL .. 検索文字列文字ならび (chars)
% TL .. 検索文字列より後の残り文字ならび (chars)
% A がvarである時はH-HL,X-XL,T-TLの3組の中にvar-varの組があってはなりません。 

%%%  sub_atom/10  %%%

sub_atom(A,S,L,R,H,X,T,HL,XL,TL) :-
        atom(A),
        sub_atom(A,S,L,R,X),
        sub_atom(A,0,S,_,H),
        N is S + L,
        sub_atom(A,N,R,_,T),
        atom_chars(H,HL),
        atom_chars(X,XL),
        atom_chars(T,TL).

sub_atom(A,S,L,R,H,X,T,HL,XL,TL) :-
        var(A),
        atom_chars(H,HL),
        atom_chars(X,XL),
        atom_chars(T,TL),
        length(HL,S),
        length(XL,L),
        length(TL,R),
        concat_atom([H,X,T],A),
        sub_atom(A,S,L,R,H,X,T,HL,XL,TL).


%%%  sub_atom/4  %%%

sub_atom(A,H,X,T) :-
        atom(A),
        sub_atom(A,S,L,R,X),
        sub_atom(A,0,S,_,H),
        N is S + L,
        sub_atom(A,N,R,_,T),
        atom_chars(H,HL),
        atom_chars(X,XL),
        atom_chars(T,TL).

sub_atom(A,H,X,T) :-
        var(A),
        atom_chars(H,HL),
        atom_chars(X,XL),
        atom_chars(T,TL),
        length(HL,S),
        length(XL,L),
        length(TL,R),
        concat_atom([H,X,T],A),
        sub_atom(A,S,L,R,H,X,T,HL,XL,TL).

%%%  sub_atom_list/4  %%%

sub_atom_list(A,HL,XL,TL) :-
        atom(A),
        sub_atom(A,S,L,R,X),
        sub_atom(A,0,S,_,H),
        N is S + L,
        sub_atom(A,N,R,_,T),
        atom_chars(H,HL),
        atom_chars(X,XL),
        atom_chars(T,TL).

sub_atom_list(A,HL,XL,TL) :-
        var(A),
        atom_chars(H,HL),
        atom_chars(X,XL),
        atom_chars(T,TL),
        length(HL,S),
        length(XL,L),
        length(TL,R),
        concat_atom([H,X,T],A),
        sub_atom(A,S,L,R,H,X,T,HL,XL,TL).