冒号(:)在Swi-Prolog中确切代表什么?

问题描述 投票:7回答:1

我无法在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
prolog colon
1个回答
8
投票

这是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).
© www.soinside.com 2019 - 2024. All rights reserved.