Я пытаюсь сгенерировать все пары X, Y, которые суммируются с данным числом Z, используя следующие предикаты:
genN(0).
genN(X) :-
genN(Xprev),
X is Xprev + 1.
sum2(X, Y, Z) :-
X + Y =:= Z.
allSum2(X, Y, Z) :-
genN(X),
X < Z,
genN(Y),
Y < Z,
sum2(X, Y, Z).
Я использую
genN
для генерации всех натуральных чисел
sum2
проверяет, заданы ли 3 числа X, Y, Z
, затем X + Y = Z
.
Тогда логика allSum2
заключается в
генерации всех пар X и Y таким образом, чтобы X
и Y
были меньше, чем Z
и
, чтобы проверить, суммируются ли они доZ
.
К сожалению, я застрял в генерировании бесконечного количества Ys
, и я не понимаю, почему.
Может кто-нибудь объяснить это мне?