root/tags/lgt2311/library/numberlist.lgt

Revision 3567, 1.2 KB (checked in by pmoura, 21 months ago)

Added predicate product/2.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1
2:- object(numberlist,
3    implements(numberlistp),
4    extends(list)).
5
6    :- info([
7        version is 1.1,
8        author is 'Paulo Moura',
9        date is 2007/4/20,
10        comment is 'List of numbers predicates.']).
11
12    average([], 0.0).
13    average([N| Ns], Average) :-
14        average(Ns, 1, N, Average).
15
16    average([], Length, Sum, Average) :-
17        Average is Sum / Length.
18    average([N| Ns], Lacc, Sacc, Average) :-
19        Lacc2 is Lacc + 1,
20        Sacc2 is Sacc + N,
21        average(Ns, Lacc2, Sacc2, Average).
22
23    min([N| Ns], Min) :-
24        min(Ns, N, Min).
25
26    min([], Min, Min).
27    min([N| Ns], Aux, Min) :-
28        (   N < Aux ->
29            min(Ns, N, Min)
30        ;   min(Ns, Aux, Min)
31        ).
32
33    max([N| Ns], Max) :-
34        max(Ns, N, Max).
35
36    max([], Max, Max).
37    max([N| Ns], Aux, Max) :-
38        (   N > Aux ->
39            max(Ns, N, Max)
40        ;   max(Ns, Aux, Max)
41        ).
42
43    product(List, Product) :-
44        product(List, 1, Product).
45
46    product([], Product, Product).
47    product([N| Ns], Acc, Product) :-
48        Acc2 is Acc * N,
49        product(Ns, Acc2, Product).
50
51    sum(List, Sum) :-
52        sum(List, 0, Sum).
53
54    sum([], Sum, Sum).
55    sum([N| Ns], Acc, Sum) :-
56        Acc2 is Acc + N,
57        sum(Ns, Acc2, Sum).
58
59    valid(List) :-
60        nonvar(List),
61        \+ \+ valid2(List).
62
63    valid2([]).
64    valid2([Head| Tail]) :-
65        number(Head),
66        valid2(Tail).
67
68:- end_object.
Note: See TracBrowser for help on using the browser.