Предикат, заменяющий в исходном списке два подряд идущих одинаковых элемента одним - Prolog

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, получил вот такое простое задание, но не получается его сделать. Подскажите пожалуйста.( Не особо разбираюсь в Прологе ) Создайте предикат, заменяющий в исходном списке два подряд идущих одинаковых элемента одним.
Вот,что есть, но я не понимаю почему выходит ошибка "Syntax Error : Operator_expected."
Листинг программы
  1. DOMAINS
  2. i=integer il=i*
  3. PREDICATES
  4. p(i,il,il)
  5. CLAUSES
  6. p(A,[A|B],C):- !, p(A,B,C).
  7. p(_,[A|B],[A|C]):- !, p(A,B,C).
  8. p(_,_,[]).
Узнал причину вывода ошибки, код который я нашёл , это для Turbo Prolog, а задание необходимо сделать в SWI Prolog,я убрал DOMAINS и PREDICATES и оставил только 3 строчки.
Листинг программы
  1. p(A,[A|B],C):- !, p(A,B,C).
  2. p(_,[A|B],[A|C]):- !, p(A,B,C).
  3. p(_,_,[]).
Вроде всё работает как надо, но я не пойму как и принцип работы Вот результат 1 ?- p(1,[2,2,3,3,4,4,5],X). X = [2, 3, 4, 5]. Буду рад если кто то поможет с объяснением.

Решение задачи: «Предикат, заменяющий в исходном списке два подряд идущих одинаковых элемента одним»

textual
Листинг программы
  1. p(_, [], []).

Объяснение кода листинга программы

В данном коде представлен предикат на языке Prolog, который выполняет следующую задачу: заменяет в исходном списке два подряд идущих одинаковых элемента одним. Предикат имеет следующий вид: p(A, B, C) Где:

  1. A - первый элемент списка
  2. B - второй элемент списка
  3. C - третий элемент списка В данном случае, если два элемента списка A и B равны между собой, то предикат возвращает третий элемент списка C. Если же элементы A и B не равны, то предикат возвращает список, состоящий из элементов A, B и C. Пример использования предиката: ?- p(a, a, b). В данном примере предикат будет заменять два одинаковых элемента a одним элементом b.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы