Prolog模式匹配

问题描述 投票:0回答:2

如果我有一个H,其形式可以是a > ba其中a和b是常量(尽管不一定命名为a和b),如何检查H的形式?

都不H == (X > Y)也不H =:= (X > Y)不起作用。

prolog pattern-matching
2个回答
1
投票

这里您需要的是统一=/2

H = (X > Y)

至于您尝试过的2种选择,它们不是您想要的:

@Term1 == @Term2

True,如果Term1等于Term2。变量仅与共享变量相同。


+Expr1 =:= +Expr2

[True,如果表达式Expr1的计算结果等于Expr2

说明来自swi-prolog.org文档,但是由于这些是ISO功能,因此与ISO兼容的实现应该没有任何区别。


0
投票

我更喜欢使用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).
© www.soinside.com 2019 - 2024. All rights reserved.