Prolog:与操作员进行双重否定

问题描述

基于我的问题Prolog: define logical operator in Prolog as placeholder for other operator,现在我要建立一个命题谓词,我想在序言中实现双重否定。不幸的是,我建立了:像(?:-proposition(-a))之类的调用会导致语法错误。

有没有一种方法可以解决这个问题而又不损失我的操作员-

解决方法

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

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

?- X = -(-a).
X = - -a.

?- proposition(-(-a)).
true.

这也可以:

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

?- proposition(- -a).
true.

如果发现不方便,您可以做的一件事就是将-----等定义为类似于-的运算符:

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

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

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

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

然后,每次接受用户输入时,您都可以先运行“预处理器”,将诸如--a之类的术语转换为-(-a)。我个人认为这不值得,但这可能是一个有趣的练习。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...