Дан список, объектами которого являются числа - Prolog

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

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

Оставить те элементы списка, которые не являются числами Фибоначчи. Помогите, в чём может быть ошибка? Заранее спасибо.

Решение задачи: «Дан список, объектами которого являются числа»

textual
Листинг программы
domains
int=integer
intl=int*
 
predicates
isSqu(int)
isFib(int)
delFib(intl,intl)
 
clauses
isSqu(N) :- M=sqrt(N), Z=trunc(M), N=Z*Z.
 
isFib(N) :- F1=5*N*N-4, isSqu(F1); F2=5*N*N+4, isSqu(F2).
 
delFib([],[]).
delFib([H|T],[H|R]) :- not(isFib(H)), delFib(T,R), !.
delFib([H|T],R)     :- isFib(H), delFib(T,R), !.

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

  1. В коде дано три predicate (предположение, факт, функция):
    • isSqu(N) — проверяет является ли число N квадратом целого числа.
    • isFib(N) — проверяет является ли число N числом Фибоначчи.
    • delFib(L,R) — удаляет из списка L все элементы, которые не являются числами Фибоначчи.
  2. В коде дано три domain (область определения):
    • int=integer — число
    • intl=int* — список чисел
    • Z=trunc(M) — результат округления числа M до целого числа, при этом M — результат вычисления квадратного корня из числа N.
  3. В первом утверждении isSqu(N) :- M=sqrt(N), Z=trunc(M), N=Z*Z. происходит вычисление квадратного корня из числа N и проверка является ли результат квадратом целого числа.
  4. Во втором утверждении isFib(N) :- F1=5NN-4, isSqu(F1); F2=5NN+4, isSqu(F2). проверяется является ли число N числом Фибоначчи. Если число N не является числом Фибоначчи, то вторая часть утверждения не будет проверена с помощью ;.
  5. В третьем утверждении delFib([],[]). определено базовое правило для пустого списка.
  6. В четвертом утверждении delFib([H|T],[H|R]) :- not(isFib(H)), delFib(T,R), !. определено правило для не пустого списка. Если элемент H не является числом Фибоначчи, то он удаляется из списка L, а список R остается без изменений.
  7. В пятом утверждении delFib([H|T],R) :- isFib(H), delFib(T,R), !. определено правило для не пустого списка. Если элемент H является числом Фибоначчи, то он добавляется в список R, а список T остается без изменений.

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


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

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

15   голосов , оценка 3.8 из 5
Похожие ответы