假设我具有以下签名:
sig A {}
sig B {}
sig P {
a: A,
b: B
}
如何编写函数f
,例如,f
返回其每个成员在其P
字段中具有值x: A
的a
的集合?
将表达式{p: P | p.a = x}
输入评估器将给我返回一个集合,但是当我尝试以此方式定义f
时>
fun f(a: A) : set P { { p: P | p.a = a } }
合金告诉我我犯了一个错误:
发生类型错误这不能是合法的关系联接,左侧是p(类型= {this / P})右侧是(type = {this / A})
假设我具有以下签名:sig A {} sig B {} sig P {a:A,b:B}我如何编写函数f,比如说,f返回每个成员对应的P的集合具有值x:A ...
问题是您用函数参数遮盖了a
关系。如果将f(a: A)
替换为f(a': A)
,则可以使用。另外,您可以使用@
运算符,该运算符返回集合的全局值而不是局部值: