Алгоритм нахождения арифметической прогрессии - Prolog
Формулировка задачи:
Помогите решить задачку. Необходимо найти суммы членов арифметической прогрессии зная разницу, количество членов и первый член т.е. имеем три входных значения. Основное условие для вычисления необходимо использовать метод рекурсии.
Решение задачи: «Алгоритм нахождения арифметической прогрессии»
textual
Листинг программы
domains int=integer predicates sum_aprog(int,int,int,int) clauses sum_aprog(A1,_,1,A1) :- !. sum_aprog(A1,D,N,S) :- N1=N-1,sum_aprog(A1,D,N1,S1), S=S1+D*N.
Объяснение кода листинга программы
- В начале кода объявлены пространства имен и предикаты:
domains- объявление типов данных, в данном случае используется только целочисленный типint=integer.predicates- здесь объявлен предикатsum_aprog, принимающий четыре аргумента типаint.clauses- здесь содержатся правила предикатаsum_aprog.
- Первое правило предиката
sum_aprogс использованием символьных переменныхA1,D,NиSвыглядит следующим образом:sum_aprog(A1,_,1,A1)- если первый аргументA1равен второму аргументу_, и номерNравен 1, то результатSтакже будет равенA1. Это базовый случай, когда арифметическая прогрессия состоит из одного элемента.
- Второе правило предиката
sum_aprogс использованием символьных переменныхA1,D,NиSвыглядит следующим образом:sum_aprog(A1,D,N,S) :- N1=N-1,sum_aprog(A1,D,N1,S1), S=S1+D*N- если номерNбольше 1, то результатSравен суммеS1, полученной на предыдущем шаге (когдаNбыл равенN-1), и произведенияDнаN. Таким образом, данный код реализует алгоритм нахождения суммы арифметической прогрессии.