% Generalizes notes12.L33.pl for instance size myappend([], Ys, Ys). myappend([X|Xs], Ys, [X|Zs]) :- myappend(Xs, Ys, Zs). mysublist(Xs, Ys) :- myappend(As, XsBs, Ys), myappend(Xs, Bs, XsBs). list_of_n(0,[]) :- !. list_of_n(1,[_]) :- !. list_of_n(N,[_|X]) :- N1 is N-1, list_of_n(N1,X), !. sublist_for_n(N,Res) :- list_of_n(N,First), list_of_n(N,Second), myappend([N],First,Nfirst), myappend([N],Second,Nsecond), myappend(Nfirst,Nsecond,Nthird), myappend(Nthird,[N],Res). mysublistgen(0,Ls) :- sublist_for_n(0,Sub), mysublist(Sub,Ls), !. %0s are included mysublistgen(N,Ls) :- sublist_for_n(N,Sub), mysublist(Sub,Ls), N1 is N-1, mysublistgen(N1,Ls). % N+1 is the number of triples since 0,0,0 is included sol(N,Ls) :- I is 3*(N+1), list_of_n(I,Ls), % 0s are included mysublistgen(N,Ls).