如何在Alloy中编写一个返回子集的函数

时间:2017-07-20 07:57:26

标签: alloy

如何在Ally中编写一个返回参数子集的函数:

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:string];

我可以写一个谓语:

fun subset( s : set univ ) : set univ {..}

但是,函数会更好读,但我不确定如何对返回值设置约束?

1 个答案:

答案 0 :(得分:0)

我认为没有任何干净的方法。

实现目标的肮脏黑客将通过例如对它们进行排名来区分univ元素。为此,我将引入一个任意签名,其中定义了一个排序关系,将一个整数与每个univ元素相关联。

然后,返回任意子集将简单地在于从给定的集合中移除具有例如子集的元素。最高等级。

fun subset( s : set univ ) : set univ {
   let maxRank= max[diff.rank[s]] |
      s - diff.rank.maxRank 
}

one sig diff{
  // remove -Int if you plan to use your subset function on sets of Int as well
  rank : (univ -Int) -> one Int
}