1

我有my_list(结构列表)以这种方式定义:

struct my_struct {
    comparator[2] : list of int;
    something_else[2] : list of uint;
};

my_list[10] : list of my_struct;

我需要限制比较器 [0] 和比较器 [1] 的值的分布(两者的分布相同),如下所示:

my_list[10] : list of my_struct;
keep soft for each (elem) in my_list {
   soft elem.comparator[0] select {
      30: [-1000 .. -50]; -- Big negative values
      40: [-49 ..49]; -- Medium values
      30: [50..1000]; -- Big positive values           
    };
    // Same for elem.comparator[1]
 };

我得到的编译错误:

*** Error: Unrecognized exp
    [Unrecognized expression 'elem.comparator[0] select {30:
[-1000..-50];40: [-49..49];30: [50..1000];}']
                at line
...
       soft elem.comparator[0] select {

如何限制驻留在列表列表中的值的分布?非常感谢您的帮助。

4

1 回答 1

1

soft有两次在那里,虽然这不是问题。你忘了放一个==之前select。我会这样写:

  keep for each (elem) in my_list {
    soft elem.comparator[0] == select {
      30: [-1000 .. -50]; -- Big negative values
      40: [-49 ..49]; -- Medium values
      30: [50..1000]; -- Big positive values           
    };
    // Same for elem.comparator[1]
  };

或者,您可以这样做keep soft for each ...,在您的情况下可能更清洁。你甚至可以把两个softs 都留在那里,虽然它看起来有点难看,IMO。

于 2014-11-24T19:51:16.123 回答