Я пытаюсь ограничить мои элементы списка равными определенным значениям при определенных условиях. Для этого я разработал определить, как вычисленное макрос, которыйс использованием макросов для списков ограничений
define <num_prob_constraints'struct_member> "CHECK_and_SET_CONSTRAINTS <lst'exp>" as computed {
//var cur : list of uint = <lst'exp>.as_a(list of uint);
var t : uint = <lst'exp>.as_a(list of uint).size();
print t;
for i from 1 to 4 {
result = append(result,"keep ",<lst'exp>,"[",i,"]==",i,"=> ",<lst'exp>,"[",i,"]==389; \n");
};
};
и в моем коде я использую этот макрос так:
struct schedule{
n : uint;
sched_w : list of list of int;
CHECK_and_SET_CONSTRAINTS sched_w;
};
Но это не работает. Во-первых, он печатает случайный размер (из макроса) вместо реального размера списка. Во-вторых, я получаю ошибки такого рода:
*** Error: '1' is of type 'int', while expecting type 'list of int'.
in code generated by macro defined at line 3 in
sports_sched_macro.e
keep sched_w[1]==1=> sched_w[1]==389;
expanded at line 8 in sports_sched.e
CHECK_and_SET_CONSTRAINTS sched_w;
Любые идеи о том, что здесь не так?