Here is a program to calculate the summation from X to Y of i using tail recursive logic in Prolog: predicates sum(integer, integer, integer) sum_aux(integer, integer, integer, integer) clauses sum(X, Y, Sum):- sum_aux(X, Y, Sum, 0). sum_aux(X, X, Sum, Sum):- !. sum_aux(X, Y, Sum, Acc):- NewX is X + 1, NewAcc is Acc + NewX, NewY is Y, sum_aux(NewX, NewY, Sum, NewAcc). This defines sum/3