range(End, End, []) . range(Start, End, [Start| Acc]) :- Next is Start + 1, range(Next, End, Acc). divisors_3_5([], []). divisors_3_5([X|Xs], [X|Ys]) :- 0 is X rem 3, divisors_3_5(Xs, Ys). divisors_3_5([X|Xs], [X|Ys]) :- 0 is X rem 5, divisors_3_5(Xs, Ys). divisors_3_5([X|Xs], Ys) :- divisors_3_5(Xs, Ys). sum(List, Result) :- sum(List, 0, Result). sum([], Acc, Acc). sum([X|Xs], Acc, Num) :- Inc is X + Acc, sum(Xs, Inc, Num). e1(Result) :- range(1,1000, R), divisors_3_5(R, Ds), sum(Ds,Result).