Не могу найти ошибку. Найти количество элементов, равных своему индексу - Prolog
Формулировка задачи:
Выводит всегда false, а должен выводить C, т.е количество элементов равных своему индексу, скорее всего ошибка где то в синтаксисе. Использую swi-prolog.
Листинг программы
- %Вывод_количества_элементов_которые_равны_своему_индексу
- sootv([],ind,0):-!. % ecли список пуст, то ничего не выводим
- sootv([H|T],ind,col):- H\=ind, ind1 is ind+1, sootv(T, ind1, col1). % если неравен ind, то увеличиваем индекс и передаем %хвост
- sootv([H|T],ind,col):- H=ind, ind1 is ind+1, col1 is col+1, sootv(T, ind1, col1). % если голова равна ind, то увеличиваем %индекс и счетчик повторений.
- start(A,B,C):-
- writeln('Vvedite spisok: '),
- read(A)
- writeln('Vvedite toshku otschota: '), % задается начальный индекс, потому что можно считать с 1 или с 0 или с 2.
- read(B),
- sootv(A, B, C).
Решение задачи: «Не могу найти ошибку. Найти количество элементов, равных своему индексу»
textual
Листинг программы
- sootv([], _, Col, Col). % ecли список пуст, выводим результат
- sootv([H|T], Ind, Col, Res):-
- H \= Ind,
- Ind1 is Ind+1,
- sootv(T, Ind1, Col, Res).
- sootv([H|T], Ind, Col, Res):-
- H = Ind,
- Ind1 is Ind+1,
- Col1 is Col+1,
- sootv(T, Ind1, Col1, Res).
Объяснение кода листинга программы
- sootv([], _, Col, Col). - Если список пуст, выводим результат
- sootv([H|T], Ind, Col, Res):- H \= Ind, - Проверяем, не равен ли элемент своему индексу
- Ind1 is Ind+1, - Увеличиваем индекс на единицу
- sootv(T, Ind1, Col, Res). - Рекурсивный вызов для оставшейся части списка
- sootv([H|T], Ind, Col, Res):- H = Ind, - Если элемент равен своему индексу
- Ind1 is Ind+1, - Увеличиваем индекс на единицу
- Col1 is Col+1, - Увеличиваем количество элементов на единицу
- sootv(T, Ind1, Col1, Res). - Рекурсивный вызов для оставшейся части списка
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д