冒号(:)在Swi-Prolog中完全代表什么?

Fib*_*sky 6 prolog colon

我无法明确找到(:)代表prolog.
在交互模式中,您可以看到以下证据:

?- display(a:b).
:(a,b)
true.

?- display([a,b,c]).
.(a,.(b,.(c,[])))
true.

?- display(a:b:c:[]).
:(a,:(b,:(c,[])))
true.

?- a:b:REST = a:TAIL.
TAIL = b:REST.
Run Code Online (Sandbox Code Playgroud)

出于什么目的(:)引入?我在www中找不到任何细节.似乎它提供了另一种将递归结构称为列表的句法方式.

我们可以说它是右关联的,它的优先级是多少?

:-op(??, xfy, :).
Run Code Online (Sandbox Code Playgroud)

有没有办法列出所有这类隐式仿函数?

listing(op). %of course this does not work
Run Code Online (Sandbox Code Playgroud)

Cap*_*liC 7

这是模块限定符,你可以看到它的声明:

?- current_op(X,Y,:).
X = 600,
Y = xfy.
Run Code Online (Sandbox Code Playgroud)

模块是Prolog的重要扩展,特别是大型程序所需,但缺少ISO标准.SWI-Prolog(通常)对此有一个务实的观点,并实现了一种有用的方法.

OT检查操作员,您可以找到这个片段有用:

oplist :-
    setof((A,C,B), current_op(A,B,C), L),
    maplist(writeln, L).
Run Code Online (Sandbox Code Playgroud)

  • ISO/IEC 13211-1(第1部分)不包括模块.然而,13211-2(第2部分)确实涵盖了模块 - 虽然这个标准非常弱 - 也就是说,它留下了许多实现定义的东西.许多人声称它留下了太多的东西,但是它们不符合第1部分的开头...... (3认同)