Найти элементы в списке, значение которых совпадает с номерами их позиций - Prolog

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

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

Найти элементы в списке, значение которых совпадает с номерами их позиций в списке. Я практически не знаю, пролога, но нужно на завтра решить задачи, который вокруг этого крутятся. Вот задача которая находит количество таких элементов:
Листинг программы
  1. sootv([], _, 0).
  2. sootv([H|T], Ind, Col):- % проверка головы списка на неравенство с индексом Ind
  3. H \= Ind,
  4. Ind1 is Ind+1,
  5. sootv(T, Ind1, Col).
  6. sootv([H|T], Ind, Col):- % проверка головы списка на равенство с индексом Ind и увеличением счетчика Col.
  7. H = Ind,
  8. Ind1 is Ind+1,
  9. sootv(T, Ind1, Col1),
  10. Col is Col1+1.
Помогите вместо счетчика, добавлять в переменную значения в виде результирующего массива.

Решение задачи: «Найти элементы в списке, значение которых совпадает с номерами их позиций»

textual
Листинг программы
  1. sootv1(Xs, Ys) :-
  2.     sootv1(Xs, 1, Ys).
  3.    
  4. sootv1([], _, []).
  5. sootv1([Pos | Teil], Pos, [Pos | Rest]) :-
  6.     Pos1 is Pos + 1,
  7.     sootv1(Teil, Pos1, Rest).
  8. sootv1([Head | Teil], Pos, Rest) :-
  9.     Head \= Pos,
  10.     Pos1 is Pos + 1,
  11.     sootv1(Teil, Pos1, Rest).
  12.    
  13. sootv2(Xs, Ys) :-
  14.     sootv2(Xs, 1, Ys).
  15.  
  16. sootv2([], _, []).
  17. sootv2([Pos | Teil], Pos, [Pos | Rest]) :-
  18.     Pos1 is Pos + 1,
  19.     !,
  20.     sootv2(Teil, Pos1, Rest).
  21. sootv2([_ | Teil], Pos, Rest) :-
  22.     Pos1 is Pos + 1,
  23.     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].

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


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

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

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы