【发布时间】:2020-05-26 00:13:14
【问题描述】:
我无法明确找到 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 中找不到任何详细信息。 似乎它提供了另一种将递归结构称为列表的语法方式。
我们可以说它是Right-associative,它的优先级是多少?
:-op(??, xfy, :).
有没有办法列出所有此类隐式函子?
listing(op). %of course this does not work
【问题讨论】:
-
代替
display/1更好地使用write_canonical/1这是ISO。 -
我认为正确的术语是“语法运算符”而不是“隐式函子”。 f 的中缀 op 声明允许用
f 代替 f( , ).