Ответ в теме: Преобразовать список в множество – удалить повторы элементов

      Комментарии к записи Ответ в теме: Преобразовать список в множество – удалить повторы элементов отключены
#3892

Кстати, если использовать вариант без накапливающего параметра, то не получится избавиться от отсечения. Иногда отсечение не используют, т.к. несмотря на то, что оно позволило повысить эффективность параллельного программирования, программы с отсечением уже нельзя рассматривать как логические высказывания (и использовать для автоматического доказательства теорем, т.к. часть вариантов отбрасывается). Подробнее про это читайте в статье “Введение в логическое программирование“.

Вариант с накапливающим параметром может быть изменен так:

   
список_во_множество([], Буфер, Множество):-
  Множество = Буфер.
список_во_множество([ПервыйЭлемент|ОстальныеЭлементы], Буфер, Множество):-
  входит_в(ПервыйЭлемент, Буфер), 
  список_во_множество(ОстальныеЭлементы, Буфер, Множество).
список_во_множество([ПервыйЭлемент|ОстальныеЭлементы], Буфер, Множество):-
  NOT(входит_в(ПервыйЭлемент, Буфер)),
  список_во_множество(ОстальныеЭлементы, [ПервыйЭлемент|Буфер], Множество).