それから、このような処理には一行中複数箇所を一体に置換する述語が必要だと
思う。決定性の。例えばreplaceall/4
replaceall(Atom,S1,S2,X) :-
  sub_atom(Atom,0,Len,0,Atom),
  replaceall(Atom,0,S1,S2,Y),
  concat_atom(Y,X).

replaceall(Atom,St,S1,S2,[S0,S2|R]) :-
  sub_atom(Atom,St2,Len,Rest2,S1),
  Len2 is St2-St,
  sub_atom(Atom,St,Len2,_,S0),
  St3 is St2 + Len,
  sub_atom(Atom,St3,Rest2,Rest3,Atom2),
  replaceall(Atom2,0,S1,S2,R),!.
replaceall(Atom,St,S1,S2,[Atom]).