Заменить элементы списка, на их глубину вхождения в него - Prolog

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

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

Помогите, пожалуйста, решить задачу. Необходимо написать предикат p(+W,–R), который из вложенного списка W делает вложенный список R, заменяя каждый элемент Y списка W на число, равное глубине вхождения Y в W. Пример: [a b [c [d]] [e g] f] -> [1 1[2[3]][2 2]1] Заранее спасибо

Решение задачи: «Заменить элементы списка, на их глубину вхождения в него»

textual
Листинг программы
p(A1,A2) :- p(A1, 0, A2).
p([], _, []) :- !.
p([H1|T1], N, [H2|T2]) :- !,
         N1 is N+1,
         p(H1, N1, H2),
         p(T1, N, T2).
p(_, N, N).

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

  1. p(A1,A2) :- p(A1, 0, A2) - объявляется факт с именем p, который имеет три аргумента: A1, A2 и число 0. Этот факт говорит о том, что если список A1 заменен на список A2 с помощью функции p, то значение A2 будет равно 0.
  2. p([], _, []) :- ! - объявляется факт с именем p, который имеет три аргумента: пустой список [], любое значение _ и список []. Этот факт говорит о том, что если список [] заменен на список [ ] с помощью функции p, то результатом будет пустой список [].
  3. p([H1|T1], N, [H2|T2]) :- !, N1 is N+1, p(H1, N1, H2), p(T1, N, T2) - объявляется факт с именем p, который имеет три аргумента: список [H1|T1], число N и список [H2|T2]. Этот факт говорит о том, что если список [H1|T1] заменен на список [H2|T2] с помощью функции p, то значение N будет увеличено на единицу, а функция p будет рекурсивно применена к списку H1 с аргументами N1 и H2, а также к списку T1 с аргументами N и T2.
  4. p(_, N, N). - объявляется факт с именем p, который имеет три аргумента: любое значение _ и два одинаковых числа N. Этот факт говорит о том, что если любое значение заменено на значение N с помощью функции p, то результатом будет число N.

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


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

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

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