Про количество переменных - Prolog
Формулировка задачи:
В задачах нахождения количества
Зачем нужны 3 элемента:список,M,K?
Почему нельзя обойтись только списком и результатом?
Решение задачи: «Про количество переменных»
textual
Листинг программы
num_odd([],0):-!. num_odd([H|T],N):-H1 is H mod 2,H1\=0,num_odd(T,NN), N is NN+1,!. num_odd([H|T],N):-H1 is H mod 2,H1=0,num_odd(T,N).
Объяснение кода листинга программы
В этом коде реализуется определение количества нечетных переменных в списке. Вот список с номерами и названиями переменных:
num_odd- функция, которая принимает два аргумента: списокHи переменнуюN.H- список, который содержит элементы, для которых мы хотим определить количество нечетных переменных.N- переменная, которая инициализируется нулем и используется для подсчета количества нечетных переменных.H1- переменная, которая используется для вычисления остатка от деления элемента спискаHна 2.NN- переменная, которая используется для хранения значенияNво время рекурсивного вызова функцииnum_odd.T- список, который является хвостом спискаHи используется для рекурсивного вызова функцииnum_odd.0- значение, которое используется для инициализации переменнойNв случае, если элемент спискаHявляется четным. Вот список с номерами и названиями действий в коде:- Линейная комбинация
H1 is H mod 2используется для определения остатка от деления элемента спискаHна 2. - Условие
H1\=0используется для проверки, является ли элемент спискаHнечетным. - Рекурсивный вызов
num_odd(T,NN)используется для рекурсивного вызова функцииnum_oddс хвостом спискаTи значениемNN, которое является результатом предыдущего вычисленияN. - Условие
H1=0используется для проверки, является ли элемент спискаHчетным. - Рекурсивный вызов
num_odd(T,N)используется для рекурсивного вызова функцииnum_oddс хвостом спискаTи текущим значениемN. - Маркер
!используется для прекращения рекурсии и возврата значенияNв качестве результата выполнения функции.