我认为我对统一有一个根本的误解。这是我的两个子句:
test(func(X), X, 1) :- X == X.
test(func(X), Y, 0) :- X \== Y.
所以-如果我查询 test(func(X), Y, D),我希望它只能用第二个子句证明,并且 D 将为 0。这是因为(我认为\我正在尝试)确保在第一个子句中,X 必须等于 X。所以我的查询不应该统一,因为 X 与 Y 不同。我认为 == 测试两个操作数是相同的变量。X 和 Y 显然不是。
但是输出:
| ?- test(func(X), Y, D).
D = 1
Y = X ? ;
D = 0
所以说如果Y = X,它与第一个子句统一。但是,Y不等于X。我在这里误解了什么?