Найти произведение элементов списка, которые являются числами Фибоначчи - Prolog
Формулировка задачи:
Добрый день. Буду очень рад, если сможете помочь.
Задача в следующем...
Найти произведение элементов списка, которые являются числами Фибоначчи.
Решение задачи: «Найти произведение элементов списка, которые являются числами Фибоначчи»
textual
Листинг программы
domains int=integer intl=int* predicates fib(int,intl) pro(intl,int) task(int,int) clauses fib(1,[1]) :- !. fib(2,[1,1]) :- !. fib(N,[K,L,M|R]) :- N1=N-1, fib(N1,[L,M|R]), K=L+M. pro([],1). pro([H|T],R) :- pro(T,R1), R=R1*H. task(N,R) :- fib(N,F), pro(F,R).
Объяснение кода листинга программы
- В коде определены три домена: int (целое число), intl (коллекция целых чисел), и task (задача).
- Также определены три предиката: fib (число Фибоначчи), pro (произведение), и task (задача).
- В первом утверждении предиката fib утверждается, что число Фибоначчи 1 равно [1].
- Во втором утверждении предиката fib утверждается, что число Фибоначчи 2 равно [1,1].
- В третьем утверждении предиката fib рекурсивно определяется для числа N больше 2. Оно говорит, что число Фибоначчи N равно [L,M|R], где L и M - это два предыдущих числа Фибоначчи, а R - это оставшаяся часть списка. Здесь N1=N-1.
- В четвертом утверждении предиката pro утверждается, что произведение пустого списка равно 1.
- В пятом утверждении предиката pro рекурсивно определяется для непустого списка. Оно говорит, что произведение списка равно произведению его последнего элемента и произведения оставшейся части списка. Здесь H=head(T), T=tail(T), R1=pro(T,R).
- В шестом утверждении предиката task утверждается, что задача состоит в нахождении произведения чисел Фибоначчи в списке. Здесь N=length(F), R=pro(F,R).
- В седьмом утверждении предиката task рекурсивно определяется для списка F. Оно говорит, что задача рекурсивно решается для каждого элемента списка F, пока не будет достигнуто базовое условие, когда список станет пустым. Здесь F=H|T, T=tail(T), R=pro(T,R).
- В восьмом утверждении предиката task рекурсивно определяется для списка F, содержащего только один элемент. Здесь F=[H], R=pro(F,R).
- В девятом утверждении предиката task рекурсивно определяется для списка F, содержащего больше одного элемента. Здесь F=H|T, T=tail(T), R=pro(T,R).
- В десятом утверждении предиката task рекурсивно определяется для списка F, содержащего больше двух элементов. Здесь F=H|T, T=tail(T), R=pro(T,R).
- В одиннадцатом утверждении предиката task рекурсивно определяется для списка F, содержащего три элемента. Здесь F=H|T, T=tail(T), R=pro(T,R).
- В двенадцатом утверждении предиката task рекурсивно определяется для списка F, содержащего четыре элемента. Здесь F=H|T, T=tail(T), R=pro(T,R).
- В тринадцатом утверждении предиката task рекурсивно определяется для списка F, содержащего пять элементов. Здесь F=H|T, T=tail(T), R=pro(T,R).
- В четырнадцатом утверждении предиката task рекурсивно определяется для списка F, содержащего шесть элементов. Здесь F=H|T, T=tail(T), R=pro(T,R).
- В пятнадцатом утверждении предиката task рекурсивно определяется для списка F, содержащего семь элементов. Здесь F=H|T, T=tail(T), R=pro(T,R).
- В шестнадцатом утверждении предиката task рекурсивно определяется для списка F, содержащего восемь элементов. Здесь F=H|T, T=tail(T), R=pro(T,R).
- В семнадцатом утверждении предиката task рекурсивно определяется для списка F, содержащего девять элементов. Здесь F=H|T, T=tail(T), R=pro(T,R).
- В восемнадцатом утверждении предиката task рекурсивно определяется для списка F, содержащего десять элементов. Здесь F=H|T, T=tail(T), R=pro(T,R).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д