Что именно означает двоеточие (:) в Swi-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
1 ответов
Это модуль квалификатор, вы можете увидеть его провозглашения с этого:
?- current_op(X,Y,:).
X = 600,
Y = xfy.
модули важное расширение к прологу, особенно необходимы для больших программ, но пропускают от стандарта ИСО. SWI-Prolog имеет (как обычно) прагматическую точку зрения на это и реализует полезный подход.
OT проверка операторов, вы можете найти этот фрагмент полезным:
oplist :-
setof((A,C,B), current_op(A,B,C), L),
maplist(writeln, L).