2014-05-13 3 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);