如何解决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)
。我个人认为这不值得,但这可能是一个有趣的练习。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。