Prolog 序言:使用运算符使双重否定成为可能

Prolog 序言:使用运算符使双重否定成为可能,prolog,logic,double,negation,Prolog,Logic,Double,Negation,基于我现在构建命题谓词的问题,我想在prolog中实现双重否定。不幸的是,我建立了:像(?:-命题(--a))这样的调用会导致语法错误 有没有一种方法可以在不丢失运算符的情况下解决此问题?Prolog在运算符周围有一些复杂的语法规则,以避免歧义。在某些情况下,您必须插入空格或括号,以明确您想要的内容 这很有效(这是我喜欢的形式): 这同样有效: ?- X = - -a. X = - -a. ?- proposition(- -a). true. 如果您觉得这不方便,您可以做的一件事是将--、

基于我现在构建命题谓词的问题,我想在prolog中实现双重否定。不幸的是,我建立了:像(?:-命题(--a))这样的调用会导致语法错误


有没有一种方法可以在不丢失运算符的情况下解决此问题?

Prolog在运算符周围有一些复杂的语法规则,以避免歧义。在某些情况下,您必须插入空格或括号,以明确您想要的内容

这很有效(这是我喜欢的形式):

这同样有效:

?- X = - -a.
X = - -a.

?- proposition(- -a).
true.
如果您觉得这不方便,您可以做的一件事是将
--
--
等定义为类似于
-
的运算符:

?- op(200, fy, --).
true.

?- op(200, fy, ---).
true.

?- X = --a, Y = ---a.
X = --a,
Y = ---a.

?- --a = -(-a).
false.

然后,每次接受用户输入时,都可以首先运行一个“预处理器”,将类似
--a
的术语翻译成
--a
。我个人认为这不值得,但这可能是一个有趣的练习。

Prolog在运算符周围有一些复杂的语法规则,以避免歧义。在某些情况下,您必须插入空格或括号,以明确您想要的内容

这很有效(这是我喜欢的形式):

这同样有效:

?- X = - -a.
X = - -a.

?- proposition(- -a).
true.
如果您觉得这不方便,您可以做的一件事是将
--
--
等定义为类似于
-
的运算符:

?- op(200, fy, --).
true.

?- op(200, fy, ---).
true.

?- X = --a, Y = ---a.
X = --a,
Y = ---a.

?- --a = -(-a).
false.
然后,每次接受用户输入时,都可以首先运行一个“预处理器”,将类似
--a
的术语翻译成
--a
。我个人认为这不值得,但这可能是一个有趣的练习