在Prolog中重新定义AND运算符

时间:2012-07-09 15:35:14

标签: prolog operator-keyword

我想在SWI-Prolog中重新定义AND运算符。但我不知道该怎么做。 我尝试了以下定义:                                        a& b = b&一个

但是,它被称为递归,不起作用。 希望人们给我建议。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以按如下方式“定义”and

and(t,X,X) :- bool(X).
and(f,X,f) :- bool(X).
bool(t).
bool(f).  

第三个参数是第一个和第二个参数的结合的结果。

当然,这只是一个练习,但实际上很难回答你的问题,因为你的问题不是很清楚。

答案 1 :(得分:1)

您可以使用op/3在SWI-Prolog中定义运算符,例如将以下内容添加到您的程序中:

:- op(1000, xfy, user:(&)).

请注意,优先级(1000)和类型(xfy)与已在SWI-Prolog中定义的连接运算符的相同(即,请参阅','/2 )。

然后,一旦声明,您可以按如下方式定义&的语义:

'&'(A,B) :- A, B.

这两个定义一起允许您使用&内联作为,的替代,以表示合并它们的程序。