Среднее арифметическое списка - Prolog (226366)
Формулировка задачи:
Предикат, считающий среднее арифметическое значение элементов списка.
пжл с объяснением.
Решение задачи: «Среднее арифметическое списка»
textual
Листинг программы
- domains
- re=real
- rl=real*
- predicates
- sum_num(rl,re,re)
- avg(rl,re)
- clauses
- sum_num([],0,0).
- sum_num([H|T],S,L) :- sum_num(T,S1,L1), S=S1+H, L=L1+1.
- avg([],_) :- fail.
- avg(X,R) :- sum_num(X,S,L), R=S/L.
Объяснение кода листинга программы
- В начале кода определены два домена: re (действительное число) и rl (множество действительных чисел).
- Далее определены два предиката: sum_num и avg.
- Предикат sum_num принимает три аргумента: список чисел, сумму всех чисел в списке и количество чисел в списке.
- Рекурсивная функция sum_num реализована с помощью трёх утверждений:
- Если список пустой, то сумма чисел равна 0, а количество чисел равно 0.
- Если список не пустой, то функция рекурсивно вызывается для оставшейся части списка, при этом сумма чисел увеличивается на значение первого элемента, а количество чисел увеличивается на 1.
- Предикат avg принимает два аргумента: список чисел и среднее значение.
- Рекурсивная функция avg реализована с помощью двух утверждений:
- Если список пустой, то среднее значение не может быть получено, поэтому происходит сбой (fail).
- Если список не пустой, то функция рекурсивно вызывается для оставшейся части списка, при этом происходит подсчёт суммы и количества чисел. Затем среднее значение вычисляется как результат деления суммы на количество чисел.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д