如何对函数体使用集合理解

问题描述 投票:1回答:1

假设我具有以下签名:

sig A {}
sig B {}

sig P {
    a: A,
    b: B
}

如何编写函数f,例如,f返回其每个成员在其P字段中具有值x: Aa的集合?

将表达式{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 ...

alloy
1个回答
0
投票

问题是您用函数参数遮盖了a关系。如果将f(a: A)替换为f(a': A),则可以使用。另外,您可以使用@运算符,该运算符返回集合的全局值而不是局部值:

© www.soinside.com 2019 - 2024. All rights reserved.