Среднее арифметическое списка - Prolog (226366)

Узнай цену своей работы

Формулировка задачи:

Предикат, считающий среднее арифметическое значение элементов списка. пжл с объяснением.

Решение задачи: «Среднее арифметическое списка»

textual
Листинг программы
  1. domains
  2. re=real
  3. rl=real*
  4.  
  5. predicates
  6. sum_num(rl,re,re)
  7. avg(rl,re)
  8.  
  9. clauses
  10. sum_num([],0,0).
  11. sum_num([H|T],S,L) :- sum_num(T,S1,L1), S=S1+H, L=L1+1.
  12.  
  13. avg([],_) :- fail.
  14. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы