生成所有总和为给定数字的对

时间:2018-12-13 19:43:57

标签: prolog

我正在尝试使用以下谓词生成所有X,Y对,这些对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,以使XY小于Z
   检查它们是否总计为Z

不幸的是,我陷入了产生无限多个Ys的困境,而且我不明白为什么。

有人可以向我解释吗?

0 个答案:

没有答案