Prolog - 相等运算符包装
Prolog - equal operator wrapping
equal(a, b) :- (a = b).
我定义了相等。
1 ?- [index].
true.
2 ?- equal(1, 1).
false.
3 ?- 1 = 1.
true.
当我运行
equal(1, 1)
它return是假的。
为什么它 return 错误,我该如何解决?
首先,你应该写 equal(A, B) :- A = B
而不是你写的东西。区别在于a和b是常量,A和B是可以统一取值的变量。我想它应该适用于您的示例。
但是你应该注意到“=”谓词只是试图统一它的参数。因此,当您询问“1 = 1”时,结果为真,因为 1 与 1 统一。但是当您询问“2 + 2 = 4”(或等于(2 + 2, 4))时,结果将为假,因为此运算符确实不评估算术运算。如果您想比较算术表达式,请改用 =:= 运算符:
equal(A, B) :- A =:= B
.
equal(a, b) :- (a = b).
我定义了相等。
1 ?- [index].
true.
2 ?- equal(1, 1).
false.
3 ?- 1 = 1.
true.
当我运行
equal(1, 1)
它return是假的。
为什么它 return 错误,我该如何解决?
首先,你应该写 equal(A, B) :- A = B
而不是你写的东西。区别在于a和b是常量,A和B是可以统一取值的变量。我想它应该适用于您的示例。
但是你应该注意到“=”谓词只是试图统一它的参数。因此,当您询问“1 = 1”时,结果为真,因为 1 与 1 统一。但是当您询问“2 + 2 = 4”(或等于(2 + 2, 4))时,结果将为假,因为此运算符确实不评估算术运算。如果您想比较算术表达式,请改用 =:= 运算符:
equal(A, B) :- A =:= B
.