Построить на основе списка L новый, содержащий номера вхождений элементов, принадлежащих списку H - Prolog

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

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

ЗАДАЧА: Построить на основе списка L новый, содержащий номера вхождений элементов, принадлежащих списку H. МОЕ РЕШЕНИЕ:
Сейчас при вводе, например таких входных данных:
Выводится так:
А нужно так:
То есть нужно чтобы он выводил номера вхождений и повторяющихся элементов тоже. ПОМОГИТЕ СРОЧНО! Кину 1000р на телефон!

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

textual
Листинг программы
pos_list(_, [], _, R, R).
pos_list(E, [E|T], N, Old, [(E,N)|TP]):-
    !,
    NN is N + 1,
    pos_list(E, T, NN, Old, TP).
pos_list(E, [_|T], N, Old, L):-
    NN is N + 1,
    pos_list(E, T, NN, Old, L).
 
% task_2(L1, L2, Result)
task_2(_L1, [], []).
task_2(L1, [HL2|TL2], Res):-
    task_2(L1, TL2, ResT),
    pos_list(HL2, L1, 0, ResT, Res).

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

В коде представлены две процедуры: pos_list и task_2. Процедура pos_list принимает четыре аргумента:

  1. E - элемент, вхождения которого нужно найти в списке L
  2. L - список, в котором нужно найти вхождения элемента E
  3. N - номер текущего вхождения элемента E (начинается с 0)
  4. Old - результат предыдущего вызова (для рекурсивного случая)
  5. TP - результат предыдущего вызова (для рекурсивного случая) Если элемент E присутствует в списке L, то он добавляется в результат (список L) с указанием его номера. Процедура task_2 принимает три аргумента:
  6. L1 - список, элементы которого нужно обработать
  7. L2 - список элементов, которые нужно найти в списке L1
  8. Res - результат выполнения задачи Если список L1 пуст, то список результатов также будет пустым. В противном случае, рекурсивно вызывается процедура task_2 для оставшейся части списка L1 и результатов предыдущего вызова. Кроме того, вызывается процедура pos_list для каждого элемента списка L2, чтобы найти его номер в списке L1. Эти номера вместе с соответствующими элементами добавляются в список результатов.

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

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