如果我有一个H,其形式可以是a > b
或a
其中a和b是常量(尽管不一定命名为a和b),如何检查H的形式?
都不H == (X > Y)
也不H =:= (X > Y)
不起作用。
这里您需要的是统一=/2
:
H = (X > Y)
至于您尝试过的2种选择,它们不是您想要的:
@Term1 == @Term2
True
,如果Term1
等于Term2
。变量仅与共享变量相同。
+Expr1 =:= +Expr2
[
True
,如果表达式Expr1
的计算结果等于Expr2
。
说明来自swi-prolog.org文档,但是由于这些是ISO功能,因此与ISO兼容的实现应该没有任何区别。
我更喜欢使用subsumes/term/2来匹配模式,因为它不绑定术语或模式中的变量。使用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).