Построить рекурсивную функцию - Prolog
Формулировка задачи:
Вот задание:Построить рекурсивную функция для вычисления n-го члена последовательности, в которой каждый четный член равен сумме двух предыдущих четных, а нечетный равен сумме двух предыдущих нечетных. Первые четыре члена равны соответственно 1, 2, 3, 4.
1 2 3 4 4 6 7 10 11 16 18 ...
Вот код:
Помогите исправить ошибку и доделать!
Решение задачи: «Построить рекурсивную функцию»
textual
Листинг программы
predicates
loop(integer, integer)
table(integer)
f(integer, integer)
clauses
f(1,R) :- R=1.
f(2,R) :- R=2.
f(3,R) :- R=3.
f(4,R) :- R=4.
f(I,R) :- I>4, I1=I-2, I2=I-4, f(I1, M), f(I2, N), R=N+M.
loop(From, To) :-
From > To,
!.
loop(From, To) :-
table(From),
Next = From + 1,
loop(Next, To).
table(N) :-
f(N, X), write("f(", N, ") = ", X), nl.
goal
loop(1,15).
Объяснение кода листинга программы
В этом коде используется язык программирования Prolog. Он содержит несколько утверждений или правил, которые определяют, как программа должна работать. Здесь есть три типа утверждений:
- Утверждение
f(I,R) :- I>4, I1=I-2, I2=I-4, f(I1, M), f(I2, N), R=N+M.определяет рекурсивную функцию f, которая принимает два аргумента, I и R. Если I больше 4, то это означает, что мы должны вызвать функцию f для I-2 и I-4, и затем присвоить результат сумме результатов этих двух вызовов функции f и переменной R. - Утверждение
loop(From, To) :- From > To, !.определяет условие для цикла loop. Если значение переменной From больше значения переменной To, то это означает, что цикл должен завершиться. - Утверждение
loop(From, To) :- table(From), Next = From + 1, loop(Next, To).определяет условие для цикла loop. Если значение переменной From не больше значения переменной To, то это означает, что мы должны вывести значение переменной From и затем вызвать функцию loop для следующей итерации цикла с переменной Next, равной From+1. - Утверждение
table(N) :- f(N, X), write(f(, N,) = `, X), nl. определяет функцию table, которая принимает один аргумент N. Она выводит значение переменной X, которое было возвращено функцией f для аргумента N, и затем выводит новую строку. - В конце кода есть цель
loop(1,15), которая вызывает функцию loop с аргументами 1 и 15. Вот список ключевых элементов кода с их номерами: - Утверждение f(I,R) :- I>4, I1=I-2, I2=I-4, f(I1, M), f(I2, N), R=N+M. (4)
- Утверждение loop(From, To) :- From > To, !. (5)
- Утверждение loop(From, To) :- table(From), Next = From + 1, loop(Next, To). (6)
- Утверждение table(N) :- f(N, X), write(
f(, N,) =, X), nl. (7) - Цель loop(1,15). (20)