Позвольте мне сначала предложить вам более простое определение:
gen(N, Xs) :-
length(Xs, N),
maplist(between(0,1), Xs).
В этом определении все рекурсивные части теперь скрыты в некоторых встроенных модулях.Первая цель гарантирует, что Xs
является списком длины N
.И следующая цель гарантирует, что каждый элемент находится между 0 и 1. Если вы посмотрите на ответы, вы поймете, в каком порядке перечислены решения:
?- gen(4, Xs).
Xs = [0,0,0,0] ;
Xs = [0,0,0,1] ;
Xs = [0,0,1,0] ;
Xs = [0,0,1,1] ;
Xs = [0,1,0,0] ;
Xs = [0,1,0,1] ;
Xs = [0,1,1,0] ; ...