Prolog定义":"操作者

时间:2014-06-01 15:42:47

标签: prolog operators

我有几个具有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, ]

我该怎么做 提前谢谢。

1 个答案:

答案 0 :(得分:1)

ISO / IEC 13211-2:2000中定义的中缀:的公共优先级和说明符是:

:- op(600, xfy, :).

除非你想打破很多程序,否则坚持这个定义。

您遇到的问题如下:

  1. 您使用标准运算符编译了flight/2

  2. 您将优先级和说明符更改为异常值。

  3. 现在,顶级打印条款,否则您的非标准运算符不需要任何额外的括号。是的,这看起来很疯狂,但是如果你在正在运行的程序中更改基本语法,你会期待什么呢?

  4. 所以,始终坚持op(600, xfy, :)