pythagorean_triples(X, Y, Z) :- list_of_k_integers(3, X:Y:Z:nil), plus(2, Something, X), /* X >= 2 */ plus(X, SomethingElse, Y), /* Y >= X */ times(X,X,Xsquared), times(Y,Y,Ysquared), times(Z,Z,Zsquared), plus(Xsquared,Ysquared,Zsquared). sum_of_four_squares(S, W, X, Y, Z) :- list_of_k_integers(4, W:X:Y:Z:nil), times(W,W,Wsquared), times(X,X,Xsquared), times(Y,Y,Ysquared), times(Z,Z,Zsquared), plus(Wsquared, Xsquared, FirstSubTotal), plus(Ysquared,Zsquared, SecondSubTotal), plus(FirstSubTotal, SecondSubTotal, S).