:- protocol(numberlistp). :- info([ version is 1.1, author is 'Paulo Moura', date is 2007/4/20, comment is 'List of numbers protocol.']). :- public(product/2). :- mode(product(+list(number), ?number), zero_or_one). :- info(product/2, [comment is 'Calculates the product of all list values.', argnames is ['List', 'Product']]). :- public(sum/2). :- mode(sum(+list(number), ?number), zero_or_one). :- info(sum/2, [comment is 'Calculates the sum of all list values.', argnames is ['List', 'Sum']]). :- public(average/2). :- mode(average(+list(number), ?float), zero_or_one). :- info(average/2, [comment is 'Calculates the average of a list of values.', argnames is ['List', 'Average']]). :- end_protocol.