В обоих примерах он используется как операционный оператор , но с другим, не связанным, значением.
В первом правиле вы цитируете, что это просто разделитель, как уже указывал Мог. Другое использование, в основном для целей документации, является индикатором предиката. Полезно, потому что у нас могут быть разные предикаты с одним и тем же функтором.
Выражения только синтаксис сахара для двоичных или унарных отношений, где функтор является оператором. означает таких выражений определяется контекстом: например, является/2 берет на себя арифметического вычисления выражений: здесь оператор выполняет ожидаемое арифметической операции
?- X is 10/3.
X = 3.3333333333333335.
встроенный current_op позволяет просматривать определения операторов. Попробуйте
?- current_op(Precedence,Associativity,/).
Precedence = 400,
Associativity = yfx .
У нас может быть предикат с именем /.Глупый пример:
/(A, B) :- format(A, B).
или лучше
A/B :- format(A, B).
может быть использован в качестве стенографии, где мы имеем много формата (ы). Это использование не рекомендуется, что приводит к трудно читаемым программам, но с учетом такого определения это правильное правило:
?- 'hello ~s'/[world].
hello world
Я нахожу пример «формата» довольно приятным; Полагаю, вы имели в виду, что использование оператора «/» для этого варианта использования не рекомендуется; однако, я думаю, когда вы определяете, например, новый оператор, например «f», чтобы писать «hello-s» f [world], на самом деле это довольно хорошо. В общем, я думаю, что возможность писать (расширяемый) синтаксис infix - огромное преимущество Prolog более сложного для чтения таких языков, как Lisp. Абстрактное синтаксическое дерево все еще полностью регулярно, и конкретный синтаксис гораздо удобнее для арифметики и т. Д. Win-win! – mat
Я также подумал, что, но в списке SWI-Prolog я получил сильную рекомендацию против него. Злоупотребление операторами - это болезнь, так называемая «оператоз» :) – CapelliC