Построить рекурсивную функцию - Prolog

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

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

Вот задание:Построить рекурсивную функция для вычисления n-го члена последовательности, в которой каждый четный член равен сумме двух предыдущих четных, а нечетный равен сумме двух предыдущих нечетных. Первые четыре члена равны соответственно 1, 2, 3, 4. 1 2 3 4 4 6 7 10 11 16 18 ... Вот код:
Листинг программы
  1. predicates
  2. f (integer , integer )
  3. clauses
  4. f(1,R) :- R=1.
  5. f(2,R) :- R=2.
  6. f(3,R) :- R=3.
  7. f(4,R) :- R=4.
  8. f(I,R) :- I>4, I1=I-2, I2=I-4, f(I1, M), f(I2, N), R=N+M.
Помогите исправить ошибку и доделать!

Решение задачи: «Построить рекурсивную функцию»

textual
Листинг программы
  1. predicates
  2.  
  3. loop(integer, integer)
  4. table(integer)
  5. f(integer, integer)
  6.  
  7. clauses
  8.  
  9. f(1,R) :- R=1.
  10. f(2,R) :- R=2.
  11. f(3,R) :- R=3.
  12. f(4,R) :- R=4.
  13. f(I,R) :- I>4, I1=I-2, I2=I-4, f(I1, M), f(I2, N), R=N+M.
  14.  
  15. loop(From, To) :-
  16.     From > To,
  17.     !.
  18. loop(From, To) :-
  19.     table(From),
  20.     Next = From + 1,
  21.     loop(Next, To).
  22.  
  23. table(N) :-
  24.     f(N, X), write("f(", N, ") = ", X), nl.
  25.  
  26. goal
  27.  
  28. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут