Среднее по списку Пролога: методы и примеры кода

Чтобы вычислить среднее значение списка в Прологе, можно использовать несколько подходов. Я предоставлю вам несколько методов вместе с примерами кода:

Метод 1: рекурсивный подход

list_avg([], 0).
list_avg(List, Avg) :-
    sum_list(List, Sum),
    length(List, Length),
    Avg is Sum / Length.

Этот метод использует предикат sum_list/2для вычисления суммы элементов в списке. Затем сумма делится на длину списка, чтобы получить среднее значение.

Метод 2: накопительный подход

list_avg(List, Avg) :-
    list_avg_acc(List, 0, 0, Avg).
list_avg_acc([], Sum, Length, Avg) :-
    Avg is Sum / Length.
list_avg_acc([X|Xs], Sum, Length, Avg) :-
    NewSum is Sum + X,
    NewLength is Length + 1,
    list_avg_acc(Xs, NewSum, NewLength, Avg).

Этот метод использует аккумулятор (Sumи Length) для отслеживания суммы и длины списка. Он рекурсивно обрабатывает элементы списка, обновляя аккумулятор на каждом этапе и, наконец, вычисляет среднее значение.

Метод 3: подход со встроенными предикатами

list_avg(List, Avg) :-
    length(List, Length),
    sum_list(List, Sum),
    Avg is Sum / Length.

Этот метод использует встроенные предикаты length/2и sum_list/2для вычисления длины и суммы списка соответственно. Затем он вычисляет среднее значение, разделив сумму на длину.

Вы можете выбрать метод, который соответствует вашим потребностям, или изучить дополнительные модификации в соответствии с вашими требованиями.