Построить рекурсивную функцию - 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. Он содержит несколько утверждений или правил, которые определяют, как программа должна работать. Здесь есть три типа утверждений:

  1. Утверждение 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.
  2. Утверждение loop(From, To) :- From > To, !. определяет условие для цикла loop. Если значение переменной From больше значения переменной To, то это означает, что цикл должен завершиться.
  3. Утверждение loop(From, To) :- table(From), Next = From + 1, loop(Next, To). определяет условие для цикла loop. Если значение переменной From не больше значения переменной To, то это означает, что мы должны вывести значение переменной From и затем вызвать функцию loop для следующей итерации цикла с переменной Next, равной From+1.
  4. Утверждение table(N) :- f(N, X), write(f(, N,) = `, X), nl. определяет функцию table, которая принимает один аргумент N. Она выводит значение переменной X, которое было возвращено функцией f для аргумента N, и затем выводит новую строку.
  5. В конце кода есть цель loop(1,15), которая вызывает функцию loop с аргументами 1 и 15. Вот список ключевых элементов кода с их номерами:
  6. Утверждение f(I,R) :- I>4, I1=I-2, I2=I-4, f(I1, M), f(I2, N), R=N+M. (4)
  7. Утверждение loop(From, To) :- From > To, !. (5)
  8. Утверждение loop(From, To) :- table(From), Next = From + 1, loop(Next, To). (6)
  9. Утверждение table(N) :- f(N, X), write(f(, N, ) =, X), nl. (7)
  10. Цель loop(1,15). (20)

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


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

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

6   голосов , оценка 3.5 из 5