Среднее арифметическое списка - 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.

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

  1. В начале кода определены два домена: re (действительное число) и rl (множество действительных чисел).
  2. Далее определены два предиката: sum_num и avg.
  3. Предикат sum_num принимает три аргумента: список чисел, сумму всех чисел в списке и количество чисел в списке.
  4. Рекурсивная функция sum_num реализована с помощью трёх утверждений:
    • Если список пустой, то сумма чисел равна 0, а количество чисел равно 0.
    • Если список не пустой, то функция рекурсивно вызывается для оставшейся части списка, при этом сумма чисел увеличивается на значение первого элемента, а количество чисел увеличивается на 1.
  5. Предикат avg принимает два аргумента: список чисел и среднее значение.
  6. Рекурсивная функция avg реализована с помощью двух утверждений:
    • Если список пустой, то среднее значение не может быть получено, поэтому происходит сбой (fail).
    • Если список не пустой, то функция рекурсивно вызывается для оставшейся части списка, при этом происходит подсчёт суммы и количества чисел. Затем среднее значение вычисляется как результат деления суммы на количество чисел.

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


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

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

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