2010-12-05 255 views

回答

2

这是不可能的,因为你可以选择Y是你想要什么,他们计算Z反之亦然。

但如果你知道YZ是一些有限的(如正整数小于5),你可以这样做:

valid_number(1). 
valid_number(2). 
valid_number(3). 
valid_number(4). 

test(X, Y, Z) :- valid_number(Y), valid_number(Z), X is Y + Z. 
+1

这些设置约束也可以通过`between/3`来实现。 – 2010-12-05 15:05:05

3

您必须将它们作为参数传递。 Prolog算术(is/2)不是魔术棒,它的正确参数必须完全实例化(无变量)才能评估。

如果您希望谓词在多个“方向”上工作,并且有多个基本术语和变量的组合,您将需要使用约束逻辑编程,但这是一个相当先进的逻辑编程领域。在有限域CLP,你可以说

:- use_module(library(clpfd)). % this differs between implementations 
test(X,Y,Z) :- X #= Y + Z. 
+1

我第二larsmans'约束的建议,找到更容易对于初学者来说比低级模式算术更能理解。在我看来,/ 2应该从入门课程中消除,因为初学者很难理解。 – mat 2010-12-05 13:58:54

相关问题