Вычислить количество четных элементов на заданном интервале - Prolog (227103)

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

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

Вычислить количество четных элементов на заданном интервале.
Решила задачу, но не могу объяснить на языке SWI Prolog, помогите пожалуйста

Решение задачи: «Вычислить количество четных элементов на заданном интервале»

textual
Листинг программы
domains
int=integer  %% просто так короче
 
predicates
task(int,int,int)  %% целевой предикат имеет параметра - начало интервала, конец интервала и к-во четных.
                      %% все - целые
 
clauses
 
%% терминальная ветвь рекурсии
 
task(B,B,0) :- (B mod 2)=1, !. %% на пустом отрезке с нечетной границей четных нет (отсекаем)
task(B,B,1) :- (B mod 2)=0, !. %% на пустом отрезке с четной границей четное одно (отсекаем) 
 
%% Пусть на отрезке [B,E] найдено N четных
%% тогда на отрезке [B+1,E] будет на одно меньше (если B четное)
 
task(B,E,N) :- B1=B+1, task(B1,E,N1), (B mod 2)=0, N=N1+1.
 
 
%% Пусть на отрезке [B,E] найдено N четных
%% тогда на отрезке [B+1,E] будет столько же (если B нечетное)
 
task(B,E,N) :- B1=B+1, task(B1,E,N), (B mod 2)=1.

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

Код представляет собой реализацию вычисления количества четных чисел на заданном интервале. В коде используется базовый случай, когда интервал пуст - если начало и конец интервала совпадают и интервал имеет нечетную границу, то количество четных чисел равно 0. Если начало и конец интервала совпадают и интервал имеет четную границу, то количество четных чисел равно 1. Затем идет рекурсивный случай, когда на интервале [B,E] уже найдено количество четных чисел N. Тогда для интервала [B+1,E] количество четных чисел будет на единицу меньше, если B четное, и столько же, если B нечетное. В итоге, после вызова целевого предиката task(A,B,N), где A - начало интервала, B - конец интервала, N - количество четных чисел на интервале [A,B], в переменной N будет содержаться количество четных чисел на интервале [A,B].

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


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

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

6   голосов , оценка 4.167 из 5
Похожие ответы