Я только что наткнулся на определение ;/2
в Руководстве по SWI Prolog, в котором говорится:
The `or' predicate is defined as:
Goal1 ; _Goal2 :- Goal1.
_Goal1 ; Goal2 :- Goal2.
Разве это не означало бы, что ;/2
ведет себя точно так же, как если бы мы написали наш собственный вспомогательный предикат, состоящий из двух правил? Я запомнил, что ;/2
было нечистой конструкцией (но, возможно, я смешиваю это с if-then-else), но это определение чисто (хотя и мета-логично).
Семантика ;/2
определена в стандарте ISO в параграфе 7.8.6, но это делается с точки зрения манипулирования текущим состоянием, точками выбора и т. Д.
Эквивалентно ли определение в руководстве SWI определению ISO? Если нет, знаете ли вы пример, в котором они различаются?
_ -> _ ; _
. - person Will Ness   schedule 14.02.2019;/2
прозрачен для сокращений (в то время как, например, call (G) непрозрачен). Я считаю, что это тоже поведение, когда мы определяем вспомогательный предикат. - person lambda.xy.x   schedule 14.02.2019