Prolog模式匹配

时间:2014-01-12 19:20:31

标签: prolog pattern-matching

如果我有一个术语H,它是任何一种形式 a > ba 其中a和b是常数(虽然不一定用a和b命名),我怎样才能检查H的形式?

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

2 个答案:

答案 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).

在此示例中,变量XA不变。