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

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

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

Доброго времени суток. Помогите, пожалуйста, с программой, которая выполняет замену второго вхождения вводимого числа на другое число. С заменой первого вхождения и всех вхождений все ясно, а вот со вторым беда совсем. Вот код для замены первого вхождения

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

textual
Листинг программы
domains
int=integer
intl=int*
 
predicates
repN(intl,int,int,int,intl)
 
clauses
repN([],_,_,_,[]).
repN([X|T],X,Y,1,[Y|T])  :- !.
repN([X|T],X,Y,N,[X|T1]) :- N1=N-1,repN(T,X,Y,N1,T1).
repN([Z|T],X,Y,N,[Z|T1]) :- Z<>X,repN(T,X,Y,N,T1).

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

  1. domains - определения типов данных
  2. predicates - определение пользовательской функции
  3. clauses - определение правил (условных выражений) для функции
  4. repN([],_,_,_,[]). - базовый случай, когда входной список пуст
  5. repN([X|T],X,Y,1,[Y|T]) :- !. - если второе вхождение найденного значения равно 1, то заменяем его на новое значение и продолжаем обработку списка
  6. repN([X|T],X,Y,N,[X|T1]) :- N1=N-1,repN(T,X,Y,N1,T1). - рекурсивный случай, когда второе вхождение не равно 1, а значит нужно продолжить поиск
  7. repN([Z|T],X,Y,N,[Z|T1]) :- Z<>X,repN(T,X,Y,N,T1). - если текущий элемент списка не равен X, то продолжаем поиск в оставшейся части списка
  8. Функция repN принимает 5 аргументов типа intl (список, X, Y, N) и возвращает список, в котором второе вхождение X заменено на Y, если оно встречается в списке N раз

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


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

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

5   голосов , оценка 4.2 из 5
Похожие ответы