Что касается типов параметров, спецификация для Minizinc (раздел 6.6.3) говорит:
Обзор. Типы параметров, определенные с помощью конструктора типов opt, определяют типы, которые могут быть или не быть. Они похожи на типы неявности Haskell в Maybe, добавляющие к типу новое значение
<>
.[...]
Инициализация. Переменную типа opt не нужно инициализировать во время экземпляра. Неинициализированная переменная типа opt автоматически инициализируется значением
<>
.
Я хотел бы проанализировать и обработать следующее ограничение с двумя opt
типами:
predicate alternative(var opt int: s0, var int: d0,
array[int] of var opt int: s,
array[int] of var int: d);
Однако я не уверен, что мне следует ожидать в качестве значений аргументов s0
и s
при синтаксическом анализе этого ограничения.
Могу ли я просто проигнорировать присутствие модификатора opt
и предположить, что подпись ограничения равна следующей?
predicate alternative(var int: s0, var int: d0,
array[int] of var int: s,
array[int] of var int: d);
Если нет, как мне с этим справиться?
var opt
может быть довольно сложно просто использовать, и я считаю, что еще хуже разбирать и обрабатывать дальше. Возможно, вам следует задать этот вопрос на странице minizinc.org/forum.html. Это немного ближе к разработчикам MiniZinc. (Вы реализуете решатель FlatZinc для OptiMatSAT? Надеюсь, вы сделаете его общедоступным.) - person hakank   schedule 03.11.2017