Создайте предикат, находящий список, состоящий из среднего геметрического элементов строк матрицы - Prolog
Формулировка задачи:
Ребята. Вот задание: Создайте предикат, находящей список, состоящий из среднегеометрического элементов строк матрицы, представленной многоуровневым списком. Уже всю голову сломал. SWI Prolog
И вторая: Создайте предикат, находящий в исходной строке слова, начинающиеся с буквы f.
Ребята помогите пожалуйста
Решение задачи: «Создайте предикат, находящий список, состоящий из среднего геметрического элементов строк матрицы»
textual
Листинг программы
domains rl=real* matr=rl* predicates pow(real,real,real) len(rl,real) product(rl,real) sgeom(rl,real) task(matr,rl) clauses pow(X,Y,Z) :- Z=exp(Y*ln(X)). len([],0.0). len([_|T],L) :- len(T,L1), L=L1+1.0. product([],1.0). product([X|T],R) :- product(T,R1), R=R1*X. sgeom(X,R) :- product(X,P), len(X,L), Q=1.0/L, pow(P,Q,R). task([],[]). task([H|T],[HH|TT]) :- sgeom(H,HH), task(T,TT).
Объяснение кода листинга программы
- В коде используется язык программирования Prolog.
- Задача состоит в создании предиката, который находит список, состоящий из среднего геометрического элементов строк матрицы.
- Для решения задачи определены следующие домены и предикаты:
- Домен
rlпредставляет вещественные числа. - Домен
matrпредставляет матрицу из доменаrl. - Предикат
powвычисляет возведение в степень. - Предикат
lenвычисляет длину списка. - Предикат
productвычисляет произведение элементов списка. - Предикат
sgeomвычисляет среднее геометрическое элементов списка. - Предикат
taskвыполняет задачу, которая заключается в нахождении списка, состоящего из среднего геометрического элементов строк матрицы.
- Домен
- В коде определены следующие утверждения:
- Утверждение
pow(X,Y,Z) :- Z=exp(Y*ln(X))вычисляет возведение в степень. - Утверждение
len([],0.0)определяет длину пустого списка равной 0. - Утверждение
len([_|T],L) :- len(T,L1), L=L1+1.0рекурсивно определяет длину списка, учитывая его голову и хвост. - Утверждение
product([],1.0)определяет произведение пустого списка равным 1. - Утверждение
product([X|T],R) :- product(T,R1), R=R1*Xрекурсивно определяет произведение элементов списка, учитывая его голову и хвост. - Утверждение
sgeom(X,R) :- product(X,P), len(X,L), Q=1.0/L, pow(P,Q,R)вычисляет среднее геометрическое элементов списка. - Утверждение
task([],[])определяет пустой список в качестве результата для пустой матрицы. - Утверждение
task([H|T],[HH|TT]) :- sgeom(H,HH), task(T,TT)рекурсивно определяет список, состоящий из среднего геометрического элементов строк матрицы.
- Утверждение