Почему SWI-Prolog изобретает f/2, учитывая только f/1?

SWI-Пролог 7.6.4:

?- dif (X, f(Y)), X=f(a).
X = f(a),
dif (f(f(a), Y), f(f(Y), a)).

Обратите внимание, что я использую f/1 в запросе, но ограничение на f/2. Это не неправильно, но кажется довольно окольным путем. Почему Пролог не возвращается

?- dif (X, f(Y)), X=f(a).
X = f(a),
dif (Y, a).

Кажется ошибкой ... извините, у меня нет конструктивного ответа, скорее всего, вам следует опубликовать дискурс SWI-Prolog. Ян В. всегда обеспечивает быстрый и точный анализ и исправления

CapelliC 20.12.2020 17:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
3
1
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этот f в печатном ограничении не имеет ничего общего с вашим f. Это просто заполнитель для хранения подтерминов вместе:

?- dif (X, incal(Y)), X=incal(a).

X = incal(a),

dif (f(incal(a), Y), f(incal(Y), a)).    <--- residual constraints, not yet resolved

Вышеупомянутое означает именно это:

  • incal(a) должен отличаться от incal(Y); и
  • Y должен отличаться от a

Да, вы могли бы упростить это, но... когда можно знать, будет ли оптимизация стоить меньше, чем выиграете?

Я понимаю. Хотя все равно странно. Он мог бы указать оба ограничения (или только последнее), не изобретая f/2.

MWB 20.12.2020 18:19

@MaxB Я полагаю, что это просто способ избежать лишнего кода или где-то увеличить скорость.

David Tonhofer 20.12.2020 19:40

Другие вопросы по теме