我有几个具有flight / 3
形式的谓词flight( new_york, boston,
[ 9:00 / 9:40 / zz765 / everyday,
16:10 / 16:55 / emi666 / monday ] ).
所以我需要定义":"运营商。 以下是
:- op( 50, xfx, :).
现在,结果非常奇怪。
1)如果我只编译一次,我会得到这个:
X = [9:((0/9):(40/zz765/everyday)),
16:((10/16):(55/emi666/monday))]
2)如果我编译它超过2次:
X = [9:0/9:40/zz765/everyday,16:10/16:55/emi666/monday]
这真是疯了!!!! 我虽然应该是
:- op(400, xfx, :).
所以它与/ 但如果我编译两次,我的flight / 3谓词会出现语法错误。
最后,我需要这样的结合:(因为我会用这些时间进行操作)。
[ (9:00) / (9:40) / zz765 / everyday, ]
我该怎么做 提前谢谢。
答案 0 :(得分:1)
ISO / IEC 13211-2:2000中定义的中缀:
的公共优先级和说明符是:
:- op(600, xfy, :).
除非你想打破很多程序,否则坚持这个定义。
您遇到的问题如下:
您使用标准运算符编译了flight/2
。
您将优先级和说明符更改为异常值。
现在,顶级打印条款,否则您的非标准运算符不需要任何额外的括号。是的,这看起来很疯狂,但是如果你在正在运行的程序中更改基本语法,你会期待什么呢?
所以,始终坚持op(600, xfy, :)
。