如果我有一个术语H,它是任何一种形式
a > b
或
a
其中a和b是常数(虽然不一定用a和b命名),我怎样才能检查H的形式?
既不
H == (X > Y)
也不
H =:= (X > Y)
不起作用。
答案 0 :(得分:1)
这里需要的是统一=/2
:
H = (X > Y)
至于你尝试的两种替代品,它们并不是你想要的:
如果
@Term1 == @Term2
True
等同于Term1
,则
Term2
。变量只与共享变量相同。
+Expr1 =:= +Expr2
True
如果表达式Expr1
的计算结果等于Expr2
。
解释来自swi-prolog.org文档,但由于这些是ISO功能,因此ISO兼容的实现应该没有任何区别。
答案 1 :(得分:0)
我更喜欢使用subsumes/term/2来匹配模式,因为它匹配没有绑定变量的模式。一种模式可以匹配多个不同的术语,因此可以重复使用该模式:
:- initialization(main).
:- set_prolog_flag('double_quotes','chars').
main :-
Pattern = (X>1),
subsumes_term(Pattern,A>1),
subsumes_term(Pattern,5>1),
subsumes_term(Pattern,6>1).
在此示例中,变量X
或A
不变。