2014-05-13 42 views
0

我創建了一個結構體列表,我喜歡在每個結構體中的字段值中求和,以滿足特定的條件。 例如:在e/Specman中總結列表項目的最佳方式

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; 

和改變約束到: 保持l.all( it.cond).sum(it.val)== sum_val;

我得到一個矛盾!

如何讓它工作?

回答

3

您應該使用列表僞法「和」和三元操作:

keep l.sum(it.cond ? It.val : 0) == 1000 
0

從它似乎要在總結現有列表中的一些元素的問題,不會產生一個新的。在這種情況下,簡單地使用: var sum:int = l.all(it.cond).sum(it.val);

相關問題