что такое код среднего / 2?
при условии, что текущий код:
average(L,X):-
sumlist(L,Sum),
length(L,N),
X is Sum/N.
, тогда вы должны ввести специальный случай, как это:
average([],0).
average(L,X):-
sumlist(L,Sum),
length(L,N),
X is Sum/N.
это будет иметь поведение, которое вы описали: «когда я пытаюсь представить среднее значение запроса ([], X). Он возвращает X = 0, что является истинным, но я все еще могу нажать; «
чтобы избежать второй ошибки, вы должны запретить прологу переходить ко второму предложению, если список пуст.
Вы можете сделать это либо с разрезом:
average([],0):-!.
average(L,X):-
sumlist(L,Sum),
length(L,N),
X is Sum/N.
или проверяя длину списка перед делением
average([],0):-!.
average(L,X):-
sumlist(L,Sum),
length(L,N),
N>0,
X is Sum/N.