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