Gaffaweb >
Love & Anger >
1995-06 >
[ Date Index |
Thread Index ]
[Date Prev] [Date Next] [Thread Prev] [Thread Next]
From: smith david rt <p0070421@brookes.ac.uk>
Date: Tue, 21 Feb 1995 19:27:36 +0000
Subject: Brit Awards
To: Love-Hounds@uunet.UU.NET
Content-Length: 1173
Hello Lau,
I'm in your group for the prolog programming coursework on 8044 Logic Programming.
Sorry I couldn't make it to our meeting yesterday (Monday 20th 6.00pm) I was
off sick. I've managed to get a program together that prints out all perfect
numbers up to about 6000. I've included the program below.
See you on Thursday anyway.
David
findp :-
Num is 1,
findperfects(Num).
findperfects (Num) :-
not( perfect(Num)),
NewNum is Num + 1,
findperfects(NewNum).
findperfects (Num) :-
perfect(Num),
write(Num), nl,
NewNum is Num + 1,
findperfects(NewNum).
perfect(Limit) :-
sum(Limit,X),
!,
Limit = X.
sum(Limit,X) :-
factors(Limit, Ps),
sumlist(Ps,X).
sumlist([],0).
sumlist([First|Rest],Sum) :-
sumlist(Rest,SumRest),
Sum is First + SumRest.
factors( Limit, Ps ) :-
integers( 1, Limit, Is ),
sift( Limit, Is, Ps ).
integers( Low, High, [Low|Rest] ) :-
Low < High,
M is Low+1,
integers(M, High, Rest ).
integers( _,_,[] ).
sift( Limit, [], [] ).
sift( Limit, [I|Is], [I|Ps]) :-
0 is Limit mod I,
sift( Limit, Is, Ps ).
sift( Limit, [I|Is], Ps ) :-
not ( 0 is Limit mod I),
sift( Limit, Is, Ps ).