Построить на основе списка 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
принимает четыре аргумента:
- E - элемент, вхождения которого нужно найти в списке L
- L - список, в котором нужно найти вхождения элемента E
- N - номер текущего вхождения элемента E (начинается с 0)
- Old - результат предыдущего вызова (для рекурсивного случая)
- TP - результат предыдущего вызова (для рекурсивного случая)
Если элемент E присутствует в списке L, то он добавляется в результат (список L) с указанием его номера.
Процедура
task_2
принимает три аргумента: - L1 - список, элементы которого нужно обработать
- L2 - список элементов, которые нужно найти в списке L1
- Res - результат выполнения задачи
Если список L1 пуст, то список результатов также будет пустым.
В противном случае, рекурсивно вызывается процедура
task_2
для оставшейся части списка L1 и результатов предыдущего вызова. Кроме того, вызывается процедураpos_list
для каждого элемента списка L2, чтобы найти его номер в списке L1. Эти номера вместе с соответствующими элементами добавляются в список результатов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д