Работа со списком - Prolog (226620)

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

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

Привет, сообщество! Имеется следующая задача. Дан некоторый список L. Необходимо перед каждым вхождением числа Y добавить число X. На данный момент написал следующее: Остановка:
Дальше смотрю, если первый элемент списка совпадает с Y, то сначала добавляю Y к списку, а потом вначале добавляю X, чтобы получился от такой список - [X Y ХВОСТ]:
Ну и если первый элемент не равен Y, то просто добавляю первый элемент списка к ответу:
НО! Программа не работает, говорит ошибка "Loop in the flow analysis". Соответственно вопрос, почему? Логика то вроде верна построения. Ошибка вылазит в последней части, когда голова не равна Y. Почитал информацию, говорят из-за зацикливания, однако я ведь всегда избавляюсь от головы, значит, в некоторый момент, список все равно станет пустым. Или я что-то путаю

Решение задачи: «Работа со списком»

textual
Листинг программы
domains
int=integer
intl=int*
 
predicates
ins(intl,int,int,intl)
 
clauses
ins([],_,_,[]).
ins([H|T] , X , H , RES) :-  ins(T,X,H,RES2),RES=[X,H|RES2].
ins([H|T] , X , Y , [H|RES]) :-  H<>Y,  ins(T , X , Y , RES).

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

  1. В коде используется язык программирования Prolog.
  2. Код работает со списками.
  3. В начале кода определены два домена: int (целое число) и intl (множество целых чисел).
  4. Также определены три предиката: ins(intl, int, int, intl), которые принимают четыре аргумента.
  5. В основной части кода определены два правила для работы с предикатом ins:
    • ins([], , , []). - если список пустой, то результат также будет пустым списком.
    • ins([H|T] , X , H , RES) :- ins(T,X,H,RES2),RES=[X,H|RES2]. - если первый элемент списка (H) равен X, то он добавляется в результат (RES), а остальные элементы обрабатываются рекурсивно (ins(T,X,H,RES2)).
    • ins([H|T] , X , Y , [H|RES]) :- H<>Y, ins(T , X , Y , RES). - если первый элемент списка (H) не равен Y, то он добавляется в результат (RES), а остальные элементы обрабатываются рекурсивно (ins(T,X,Y,RES)).

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


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

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

10   голосов , оценка 3.8 из 5