0

我创建了一个结构列表,我喜欢对每个结构中满足特定条件的字段的值求和。例如:

struct packet {
   val:int;
   cond:bool;
};
l:list of packet;

当我写以下内容时:

keep l.all(it.cond).sum(it.val) == 1000;
I get an error: GEN_NO_GENERATABLE_NOTIF.

当我定义一个结果变量时:

sum_val : int;
keep sum_val == 100;

并将约束更改为: keep l.all(it.cond).sum(it.val) == sum_val;

我有矛盾!

我如何使它工作?

4

2 回答 2

3

您应该使用列表伪方法“sum”和三元运算:

keep l.sum(it.cond ? It.val : 0) == 1000
于 2014-05-13T08:45:53.197 回答
0

从问题来看,您似乎想对现有列表中的一些元素求和,而不是生成新列表。在这种情况下,只需使用: var sum : int = l.all(it.cond).sum(it.val);

于 2014-05-13T08:47:02.593 回答