このディレクトリの索引

#  いろいろな環境の中には、先読みの否定である (?! ) が
#  使えない環境があります。 このような環境では、
#  「ABC」 という文字列を含まない
#  というような、文字列の否定をする正規表現を作るのは
#  とても難しい作業になります
#  ※ (?! ) が使える環境での作り方は こちら 。
#  
#  では、例として、
#  以下のようなテキストにマッチする正規表現を考えてみましょう★
#  ・ テキストの先頭が AA から始まる
#  ・ テキストの末尾が AA で終わる
#  ・ 先頭の AA と、末尾の AA との間に挟まれた文字列の中にはAA が存在しない
#  


'・ テキストの先頭が AA から始まる
・ テキストの末尾が AA で終わる
・ 先頭の AA と、末尾の AA との間に挟まれた文字列の中にはAA が存在しない'(_テキスト) :-
        sub_atom(_テキスト,'AA',S2,'AA',_,_,_),
        \+(sub_atom(S2,_,_,_,'AA')).


%%%%%%%% sub_atom/7 %%%%%%%%

sub_atom(A,H,X,T,HL,XL,TL) :-
        atom(A),
        atom_chars(A,Chars),
        append(HL,XL,TL,Chars),
        'HL_XL_TL_H_X_T'(HL,XL,TL,H,X,T).

'HL_XL_TL_H_X_T'(HL,XL,TL,H,X,T) :-
        \+(XL=[]),
        atom_chars(H,HL),
        atom_chars(X,XL),
        atom_chars(T,TL).

%%%%%%%% append/4 %%%%%%%%

append([],L2,L3,L4) :-
        append(L2,L3,L4).
append([U|L1],L2,L3,[U|L4]) :-
        append(L1,L2,L3,L4).