Алгоритм действий (нахождение среднего значения элементов списка) - Prolog
Формулировка задачи:
Всем привет.
Срочно нужно узнать алгоритм действий программы. (Т.е что за чем идет, к примеру первое - это вопрос, второе - это строка #2 и т.п)
Что представляет собой каждая строка я знаю, но вот порядок - нет.
Код:
Помогите)
Очень срочно :с
Решение задачи: «Алгоритм действий (нахождение среднего значения элементов списка)»
textual
Листинг программы
sum([], 0). %% сумма эл-тов пустого списка = 0 sum([H|T], S) :-sum(T, S_T), %% сумма эл-тов списка = сумма эл-тов хвоста S = S_T + H. %% плюс голова length([], 0). %% длина пустого списка = 0 length([_|T], L) :-length(T, L_T), %% длина списка = длина хвоста L = L_T + 1. %% плюс 1 avg(L,A):-sum(L,S), %% для списка L сумма=S length(L,K), %% длина = K A=S/K. %% среднее... ?-avg([8,7,3],A),write(A)
Объяснение кода листинга программы
sum([], 0).
- Эта строка кода определяет функциюsum
, которая принимает два аргумента: список и сумму. Если список пуст, то сумма равна 0.sum([H|T], S) :-sum(T, S_T),
- Здесь функцияsum
рекурсивно вызывается для хвоста спискаT
с суммойS_T
. Затем к этой сумме добавляется значение головы спискаH
.length([], 0).
- Эта строка кода определяет функциюlength
, которая принимает два аргумента: список и его длину. Если список пуст, то его длина равна 0.length([_|T], L) :-length(T, L_T),
- Здесь функцияlength
рекурсивно вызывается для хвоста спискаT
с длинойL_T
. Затем к этой длине добавляется 1.avg(L,A):-sum(L,S),
- Эта строка кода определяет функциюavg
, которая принимает два аргумента: списокL
и переменнуюA
. Функцияsum
вызывается для спискаL
с переменнойS
, а функцияlength
вызывается для спискаL
с переменнойK
. Затем вычисляется среднее значение, разделяя сумму на длину.write(A)
- Эта строка кода выводит значение переменнойA
, которое является средним значением списка[8,7,3]
.?-avg([8,7,3],A),write(A)
- Это строка кода, которая вызывает функциюavg
с аргументами[8,7,3]
и переменнойA
. Затем результат выводится с помощью функцииwrite
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д