% 2 subsequence([X|Xs],[X|Ys]) :- subsequence(Xs,Ys). subsequence(Xs,[_Y|Ys]) :- subsequence(Xs,Ys). subsequence([],_Ys). % 3 :- op(700,xfx,\). duplicate(Xs,N,Ys) :- duplicate2(Xs,N,Ys\[]). duplicate2([],_N,Ys\Ys). duplicate2([X|Xs],N,Ys0\Ys2) :- generate(X,N,Ys0\Ys1), duplicate2(Xs,N,Ys1\Ys2). generate(_X,0,Ys\Ys). generate(X,N,Ys0\Ys1) :- N > 0, N1 is N - 1, generate(X,N1,Ys0\[X|Ys1]). % 5 :- use_module(library(clpfd)). factorial(0,1). factorial(N,F) :- N #> 0, N1 #= N-1, F #= N * F1, factorial(N1,F1).