当我只知道X时,如何在prolog中获得Y和Z?
例如:
test(X, Y, Z) :- X is Y + Z.
但错误:
?- test(2, Y, Z).
ERROR: is/2: Arguments are not sufficiently instantiated
答案 0 :(得分:3)
你必须将它们作为参数传递。 Prolog算术(is/2
)不是魔术棒,它的正确参数必须在被评估之前完全实例化(无变量)。
如果您希望谓词在多个“方向”中工作,使用基础术语和变量的多种组合,您将需要使用约束逻辑编程,但这是一个相当高级的逻辑编程领域。在有限域上的CLP中,您可以说
:- use_module(library(clpfd)). % this differs between implementations
test(X,Y,Z) :- X #= Y + Z.
答案 1 :(得分:2)
这是不可能的,因为您可以选择Y
为您想要的任何内容,并计算Z
,反之亦然。
虽然如果您知道Y
和Z
来自某些有限集合(例如小于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.