Не могу найти ошибку. Найти количество элементов, равных своему индексу - Prolog

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

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

Выводит всегда false, а должен выводить C, т.е количество элементов равных своему индексу, скорее всего ошибка где то в синтаксисе. Использую swi-prolog.
Листинг программы
  1. %Вывод_количества_элементов_которые_равны_своему_индексу
  2.  
  3. sootv([],ind,0):-!. % ecли список пуст, то ничего не выводим
  4. sootv([H|T],ind,col):- H\=ind, ind1 is ind+1, sootv(T, ind1, col1). % если неравен ind, то увеличиваем индекс и передаем %хвост
  5. sootv([H|T],ind,col):- H=ind, ind1 is ind+1, col1 is col+1, sootv(T, ind1, col1). % если голова равна ind, то увеличиваем %индекс и счетчик повторений.
  6. start(A,B,C):-
  7. writeln('Vvedite spisok: '),
  8. read(A)
  9. writeln('Vvedite toshku otschota: '), % задается начальный индекс, потому что можно считать с 1 или с 0 или с 2.
  10. read(B),
  11. sootv(A, B, C).

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

textual
Листинг программы
  1. sootv([], _, Col, Col).    % ecли список пуст, выводим результат
  2.  
  3. sootv([H|T], Ind, Col, Res):-
  4.     H \= Ind,
  5.     Ind1 is Ind+1,
  6.     sootv(T, Ind1, Col, Res).
  7. sootv([H|T], Ind, Col, Res):-
  8.     H = Ind,
  9.     Ind1 is Ind+1,
  10.     Col1 is Col+1,
  11.     sootv(T, Ind1, Col1, Res).

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

  1. sootv([], _, Col, Col). - Если список пуст, выводим результат
  2. sootv([H|T], Ind, Col, Res):- H \= Ind, - Проверяем, не равен ли элемент своему индексу
  3. Ind1 is Ind+1, - Увеличиваем индекс на единицу
  4. sootv(T, Ind1, Col, Res). - Рекурсивный вызов для оставшейся части списка
  5. sootv([H|T], Ind, Col, Res):- H = Ind, - Если элемент равен своему индексу
  6. Ind1 is Ind+1, - Увеличиваем индекс на единицу
  7. Col1 is Col+1, - Увеличиваем количество элементов на единицу
  8. sootv(T, Ind1, Col1, Res). - Рекурсивный вызов для оставшейся части списка

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


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

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

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

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

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

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