Я пытаюсь реализовать функции высшего порядка в MiniZinc.Я не уверен, возможно ли передать функцию непосредственно другой функции, поэтому я использовал перечисление со списком имен функций:
var int : a;
enum functions = {add,sub};
function var int:sub(var int:a,var int:b) =
a+b;
function var int:add(var int:a,var int:b) =
a+b;
function var int:higher_order(var functions:func,var int:a,var int:b) =
if func==add then
add(a,b)
else
0
endif;
constraint a == higher_order(add,3,4);
solve satisfy;
output [show(a)];
Этот метод работает, хотя на самом деле это не более высокий порядокфункция.Есть ли другой способ реализации функций высшего порядка в MiniZinc?