我无法明确找到 (:) 代表什么prolog http://www.swi-prolog.org/pldoc/doc_for?object=op/3.
在交互模式下您可以看到以下证据:
?- 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
这就是module https://www.swi-prolog.org/pldoc/man?section=modules限定符,你可以这样查看它的声明:
?- 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).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)