2

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

a & b = b & a

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

4

2 回答 2

2

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

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

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

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

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

这两个定义一起将允许您在包含它们的程序中使用&in-line 来代替表示连接的意思。,

于 2012-07-24T06:39:21.520 回答
1

您可以“定义”and如下:

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

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

当然,这只是一个练习,但确实很难回答您的问题,因为您的问题的全部内容并不是很清楚。

于 2012-07-10T16:40:48.190 回答