view 3-Prolog/day2-maths.pl @ 103:98be775c533c default tip

An odd "non-determinism" example from StackOverflow It is clever, but doesn't make much sense as to how it gets its results
author IBBoard <dev@ibboard.co.uk>
date Sun, 14 Jul 2019 13:44:13 +0100
parents f86bb0d669be
children
line wrap: on
line source

% First use of variable assignment!
% We use a mix of rules and facts to do maths on lists.
count(0, []).
% This seems backwards, but we're saying "Count of a list with a head and a tail
% is the count of its tail (which will be assigned to TailCount) plus one, which
% is then assigned to Count, which gets passed back out"
count(Count, [Head|Tail]) :- count(TailCount, Tail), Count is TailCount + 1.

sum(0, []).
sum(Total, [Head|Tail]) :- count(Sum, Tail), Total is Head + Sum.

average(Average, List) :- sum(Sum, List), count(Count, List), Average is Sum / Count.