Найти элементы в списке, значение которых совпадает с номерами их позиций - Prolog
Формулировка задачи:
- sootv([], _, 0).
- sootv([H|T], Ind, Col):- % проверка головы списка на неравенство с индексом Ind
- H \= Ind,
- Ind1 is Ind+1,
- sootv(T, Ind1, Col).
- sootv([H|T], Ind, Col):- % проверка головы списка на равенство с индексом Ind и увеличением счетчика Col.
- H = Ind,
- Ind1 is Ind+1,
- sootv(T, Ind1, Col1),
- Col is Col1+1.
Решение задачи: «Найти элементы в списке, значение которых совпадает с номерами их позиций»
- sootv1(Xs, Ys) :-
- sootv1(Xs, 1, Ys).
- sootv1([], _, []).
- sootv1([Pos | Teil], Pos, [Pos | Rest]) :-
- Pos1 is Pos + 1,
- sootv1(Teil, Pos1, Rest).
- sootv1([Head | Teil], Pos, Rest) :-
- Head \= Pos,
- Pos1 is Pos + 1,
- sootv1(Teil, Pos1, Rest).
- sootv2(Xs, Ys) :-
- sootv2(Xs, 1, Ys).
- sootv2([], _, []).
- sootv2([Pos | Teil], Pos, [Pos | Rest]) :-
- Pos1 is Pos + 1,
- !,
- sootv2(Teil, Pos1, Rest).
- sootv2([_ | Teil], Pos, Rest) :-
- Pos1 is Pos + 1,
- sootv2(Teil, Pos1, Rest).
Объяснение кода листинга программы
Код представляет собой два логических предиката sootv1 и sootv2, которые принимают в качестве входных аргументов список Xs и список Ys. Предикат sootv1 используется для поиска элементов в списке Xs, значение которых совпадает с номерами их позиций в списке Ys. Предикат sootv2 используется для поиска элементов в списке Xs, значение которых не совпадает с номерами их позиций в списке Ys. Вот пример использования кода: ?- sootv1([1, 2, 3, 4], [2, 4, 1, 3]). В этом примере мы ищем элементы в списке [1, 2, 3, 4], значение которых совпадает с номерами их позиций в списке [2, 4, 1, 3]. Ответ будет [2, 4]. ?- sootv2([1, 2, 3, 4], [2, 4, 1, 3]). В этом примере мы ищем элементы в списке [1, 2, 3, 4], значение которых не совпадает с номерами их позиций в списке [2, 4, 1, 3]. Ответ будет [1, 3].
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д