我无法明确找到(:)代表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.
出于什么目的(:)被引入?我在www中找不到它的任何细节。 似乎它提供了另一种将递归结构作为列表进行讨论的语法方法。
我们可以说它是右关联的,它的优先级是多少?
:-op(??, xfy, :).
有没有办法列出所有这类隐式仿函数?
listing(op). %of course this does not work
答案 0 :(得分:7)
这是module限定符,你可以看到它的声明:
?- current_op(X,Y,:).
X = 600,
Y = xfy.
模块是Prolog的重要扩展,特别是大型程序所需,但是缺少ISO标准。 SWI-Prolog(通常)对此有一个务实的观点,并实现了一种有用的方法。
OT 检查操作员,您可以找到有用的代码段:
oplist :-
setof((A,C,B), current_op(A,B,C), L),
maplist(writeln, L).