Системы пролога, нацеленные на iso-prolog соответствие не обязано поддерживать составные термины с произвольно большими арностями. Флаг Prolog max_arity
отражает это.
Согласно ISO / IEC 13211-1: 1995:
7.11.2.3 Флаг: max_arity
Возможные значения: только значение по умолчанию.
Значение по умолчанию: реализация определена
Изменяемый: Нет
Описание: максимальная арность, разрешенная для любого составного термина, или
unbounded
, когда процессор не имеет ограничения на количество аргументов для составного термина.
Итак, системы Prolog могут или не могут устанавливать верхний предел для max_arity
... но как насчет нижнего ограничения? Скажем, 5
в порядке?
НЕТ! ISO / IEC 13211-1: 1995 / Cor.2: 2012, Техническое исправление 2 определяет call/2..8
как:
8.15.4 call / 2..8
...
ПРИМЕЧАНИЕ. Соответствующий стандарту процессор может реализовать call / N одним из следующих способов поскольку условие ошибки d зависит от реализации (3.91).
- Реализуйте только семь встроенных предикатов от call / 2 до call / 8.
- Реализуйте call / 2..N до любого N, которое находится в пределах 8..max_arity (7.11.2.3). Выдают ошибки существования для больших арностей ниже max_arity.
- Реализуйте call / 9 и выше только для определенных режимов выполнения.
Все эти способы только подразумевают Max_arity >= 8
- но не более того.
Итак, у моего вопроса есть (как минимум) две стороны:
Пользователь Prolog:
Какую максимальную арность я могу использовать, если хочу избежать привязки к поставщику?Разработчик Prolog:
Какую наименьшуюMax_arity
я должен поддерживать, если я стремлюсь 1 к соответствию ISO-Prolog?
Прямо сейчас я вполне уверен, что ответ таков:
Да,
Max_arity = 8
в порядке.
Но так ли это на самом деле? Есть какие-то подсказки, которые мне не хватает?
Сноски:
1) Да.