Написать предикат, вычисляющий среднее арифметическое элементов списка
Конечно,
можно, как всегда, опереться на рекурсию,
но проще воспользоваться тем, что у нас
уже есть предикаты, которые позволяют
вычислить количество и сумму элементов
списка. Для нахождения среднего нам
достаточно будет сумму элементов списка
разделить на их количество. Это можно
записать следующим образом:
avg(L,A):–
summa(L,S), /* помещаем в переменную S сумму
элементов списка */ length(L,K), /* переменная
K равна количеству элементов списка */
A=S/K. /* вычисляем среднее как отношение
суммы к количеству */
summa([],S,S).
summa([H|T],N,S):-N_T=H+N,summa(T,N_T,S).
sum2(L,S):-summa(L,0,S).
length([], 0).
length([_|T], L):-length(T, L_T),L = L_T + 1.
avg([],0):-!.
avg(L,A):-sum2(L,S),length(L,K),A=S/K.