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