Ответ в теме: Заменить группы идущих подряд пробелов на одиночные пробелы

      Комментарии к записи Ответ в теме: Заменить группы идущих подряд пробелов на одиночные пробелы отключены
#1965

Если вы используете Turbo или Visual Prolog, предварительно преобразуйте строку в список символов.

remove_double_spaces([], []):-!.
remove_double_spaces([Element], [Element]):-!.
remove_double_spaces([Head_A, Head_B|Tail], StringWithoutDoubleSpaces):-
  is_space(Head_A), is_space(Head_B), !, 
  remove_double_spaces([Head_B|Tail], StringWithoutDoubleSpaces).
remove_double_spaces([Head_A|Tail], [Head_A|StringWithoutDoubleSpaces]):-
  remove_double_spaces(Tail, StringWithoutDoubleSpaces).

Если исходная строка пуста или содержит лишь один символ – то из нее нечего удалять, результатом работы должна являться точно такая же строка.
В противном случае, от строки отделяются два первых символа. Стандартный предикат is_space проверяет являются ли символы пробельными (при его отсутствии можно использовать просто сравнение с символом пробела). Если первые два символа – пробелы, то первый символ отбрасывается, а остальные обрабатываются рекурсивно. В противном случае первый символ должен быть добавлен к результату рекурсивных вычислений.