Alloy 中嵌套值的总和
Sum of nested values in Alloy
我从类似于下面这些的定义开始
sig Sub { vals : set Int }
sig Top { subs : set Sub }
我想要一个表达式,它可以生成 Top
类型的内容中包含的所有值的总和。 Top
当写成嵌套集时,会类似于 {{3, 4}, {7}}
。这种情况下嵌套求和的结果应该是14.
这个函数当然只是给出外层集合中的元素个数。
fun allsum[t: Top] : one Int { #t }
我认为我需要使用内置的 sum
函数和集合理解,但 Alloy 语法对我来说仍然有些神秘。
为此,您需要一个嵌套求和表达式:
fun allsum[t: Top] : Int {
sum s: t.subs | (sum v: s.vals | v)
}
一般格式为:
sum e: <set> | <expression involving e>
我从类似于下面这些的定义开始
sig Sub { vals : set Int }
sig Top { subs : set Sub }
我想要一个表达式,它可以生成 Top
类型的内容中包含的所有值的总和。 Top
当写成嵌套集时,会类似于 {{3, 4}, {7}}
。这种情况下嵌套求和的结果应该是14.
这个函数当然只是给出外层集合中的元素个数。
fun allsum[t: Top] : one Int { #t }
我认为我需要使用内置的 sum
函数和集合理解,但 Alloy 语法对我来说仍然有些神秘。
为此,您需要一个嵌套求和表达式:
fun allsum[t: Top] : Int {
sum s: t.subs | (sum v: s.vals | v)
}
一般格式为:
sum e: <set> | <expression involving e>