Получение списка чисел Фибоначчи - Prolog

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

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

Что то не выходит...
Листинг программы
  1. %fib(Номер,Рез-т,Список).
  2. fib(1,1,[H|_]):-H is 1,!.
  3. fib(2,1,[H|_]):-H is 1,!.
  4. fib(N,F,[H|T]):-N1 is N-1,fib(N1,F1,T),N2 is N-2, fib(N2,F2,T),F is
  5. F1+F2,H is F.

Решение задачи: «Получение списка чисел Фибоначчи»

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4.  
  5. predicates
  6. app(intl,intl,intl)
  7. last2(intl,intl)
  8. fiblist(int,intl)
  9.  
  10. clauses
  11.  
  12. app([],X,X).
  13. app([H|T],X,[H|Q]):-app(T,X,Q).
  14.  
  15. last2([X,Y],[X,Y]).
  16. last2([_|T],[X,Y]):- last2(T,[X,Y]).
  17.  
  18. fiblist(1,[1]) :- !.
  19. fiblist(2,[1,1]) :- !.
  20. fiblist(N,L) :- N1=N-1, fiblist(N1,L1), last2(L1,[X,Y]), Z=X+Y, app(L1,[Z],L).
  21.  
  22. goal
  23. fiblist(7,Z),write(Z),nl.

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

В этом коде используется язык программирования Prolog. Он решает задачу генерации последовательности чисел Фибоначчи. Код начинается с определения трёх типов данных: int (целое число), intl (целое число, управляющее от 0 до n), и списка, представленного как intl (int*). Затем определены три предиката:

  1. app(intl, intl, intl) - этот предикат добавляет элемент в начало списка.
  2. last2(intl, intl) - этот предикат удаляет последний элемент из списка.
  3. fiblist(int, intl) - этот предикат генерирует список чисел Фибоначчи. Клауза app([],X,X) утверждает, что если список пуст, то добавление любого элемента в начало списка не изменит его. Клауза app([H|T],X,[H|Q]) говорит, что если в списке есть по крайней мере один элемент, то можно добавить новый элемент в начало списка, оставив остальные элементы без изменений. Клауза last2([X,Y],[X,Y]) утверждает, что если список содержит ровно два элемента, то это его последние два элемента. Клауза last2([_|T],[X,Y]) говорит, что если в списке есть более двух элементов, то можно удалить последний элемент, оставив остальные элементы без изменений. Клауза fiblist(1,[1]) утверждает, что список чисел Фибоначчи для n=1 состоит из одного элемента 1. Клауза fiblist(2,[1,1]) говорит, что список чисел Фибоначчи для n=2 состоит из двух элементов 1 и 1. Клауза fiblist(N,L) :- N1=N-1, fiblist(N1,L1), last2(L1,[X,Y]), Z=X+Y, app(L1,[Z],L). генерирует список чисел Фибоначчи для n=N. Она использует рекурсию, чтобы вычислить число Фибоначчи для n-1, затем добавляет два последних элемента этого списка (представленных как [X,Y]) к новому списку, и добавляет новый элемент (Z=X+Y) в начало нового списка. В конце кода есть цель fiblist(7,Z),write(Z),nl, которая генерирует список чисел Фибоначчи для n=7 и выводит его на консоль.

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


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

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

9   голосов , оценка 3.667 из 5

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

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

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