prolog avg der Liste
Habe ich den code, der in der Lage zu berechnen, die avg eine Liste, aber das problem ist nur, es hat Fehler, wenn es ist die leere Liste. Ich möchte den Wert false zurück, wenn die Liste leer ist. irgendein Tip???
avg( List, Avg ):-
sum( List, Sum ),
length( List, Length),
Avg is Sum /Length.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur eine Bedingung hinzufügen, dass die Liste nicht leer ist, zum Beispiel:
Dadurch wird das Prädikat scheitern, was angemessen ist, da der Durchschnitt ist nicht definiert.
natürlich, Division durch null ist in der Regel nicht erlaubt. Wenn die (per Konvention) der Durchschnitt von 0 Elemente 0 eine Korrektur möglich wäre
Bearbeiten getestet habe ich in SWI-Prolog, ersetzen Summe/2 von sumlist/2
test:
Bearbeiten tut mir Leid, habe ich übersehen, dass
false
erforderlich ist, auf einen leeren input-Liste. Dann ein test, wennLength > 0
ist sicherlich angebracht. Das Prädikat wird nicht auf das.Alternative mit Bibliothek(Aggregat):
;
als Kommentar.avg( Liste, Avg/1 ):-
sollten Sie teilen der Durchschnitt von 1.
wie avg(Liste, Avg/1). Ich habe gerade kopiert es in den oben Kommentare und fügen Sie avg/2.