#prolog
#prolog
Вопрос:
z(1) --> [].
z(N) --> [0] , z(Nm), {N is Nm 1}.
z(N) --> [1] , z(Nm), {N is Nm 1}.
Это то, что у меня есть до сих пор. Я хочу сгенерировать
[0,0]
[0,1]
[1,0]
[1,1]
но вместо этого запускается в бесконечный цикл после [0, 0]
когда вы запрашиваете
?- z(3, X, []).
Комментарии:
1. Почему вы удалили свой вопрос? Таким образом, никто даже не поймет ответ. Пожалуйста, учтите, что ответ не только для вас, но и может помочь другим. Вы должны иметь возможность прокомментировать свой собственный вопрос, где вы можете сказать «спасибо».
Ответ №1:
Если вы всегда будете вызывать предикат с N как целое число, вы можете попробовать:
z(1) --> [].
z(N) --> [0] , {N>1, Nm is N-1}, z(Nm).
z(N) --> [1] , {N>1, Nm is N-1}, z(Nm).
Результат:
?- z(3, X, []).
X = [0, 0] ;
X = [0, 1] ;
X = [1, 0] ;
X = [1, 1] ;
false.
Комментарии:
1. Зачем тест
integer(N)
? Этоphrase(z(N), L)
приводит к единому решению, а затем (тихо и неправильно) завершается неудачей.2. @false Этот тест был устранен, спасибо!