23 lines
756 B
Plaintext
23 lines
756 B
Plaintext
:- object(spliting).
|
|
|
|
:- public(convert/2).
|
|
:- mode(convert(+atom, -atom), one).
|
|
|
|
convert(StringIn, StringOut) :-
|
|
atom_chars(StringIn, CharactersIn),
|
|
phrase(split(',', Tokens), CharactersIn),
|
|
phrase(split('.', Tokens), CharactersOut),
|
|
atom_chars(StringOut, CharactersOut).
|
|
|
|
split(Separator, [t([Character| Characters])| Tokens]) -->
|
|
[Character], {Character \== Separator}, split(Separator, [t(Characters)| Tokens]).
|
|
split(Separator, [t([])| Tokens]) -->
|
|
[Separator], split(Separator, Tokens).
|
|
split(_, [t([])]) -->
|
|
[].
|
|
% the look-ahead in the next rule prevents adding a spurious separator at the end
|
|
split(_, []), [Character] -->
|
|
[Character].
|
|
|
|
:- end_object.
|