Ответ в теме: Удалить из данной строки все повторные вхождения символов

      Комментарии к записи Ответ в теме: Удалить из данной строки все повторные вхождения символов отключены
#2193

Схематично, программа должна выглядеть следующим образом:

goal
  file_str("D:/Work/input.txt", InitialString), 
  string_to_list(InitialString, InitialList),
  remove_repeated(InitialList, ListWithoutRepeated),
  list_to_string(ListWithoutRepeated, StringWithoutRepeated),
  write(StringWithoutRepeated), nl.

Тут содержимое файла считывается в строку, строка преобразуется в список, из списка удаляются повторяющиеся символы, результат преобразуется в строку, которая выводится на экран. Осталось описать функцию удаление повторов из списка по алгоритму, приведенному выше:

remove_repeated([], []):-!. 
  % если исходный список не содержит элементов - результатом является пустой список
remove_repeated([Head|Tail], [Head|TailWithoutRepeated]):- 
  % исходный список разделяется на первый элемент и остальные
  % первый элемент безусловно помещается в начало списка-результата
  delete(Tail, Head, TailWithoutHead), 
  % при помощи готовой функции delete из списка Tail удаляются все вхождения Head
  remove_repeated(TailWithoutHead, TailWithoutRepeated).
  % остальные элементы формируются рекурсивно

Альтернативную реализацию этой функции можно посмотреть в теме “Преобразовать список во множество“.