2016-11-07 51 views
0

下面我创建了三组:名称,地址和主机。地址字段将名称映射到地址。主机字段将地址映射到主机。为什么我会得到两个关系连接和三个关系连接的相同图形?

sig Name { 
    addr: Address 
} 

sig Address { 
    host: Host 
} 

sig Host {} 

在这里,我要求合金分析器创建一个两个关系连接的实例:addr和host。

run {one addr.host} for 1 

这是所生成的图形:

enter image description here

接着,请问合金分析仪以产生用于连接三个关系的一个实例:地址,相同的原子的三元关系在每个元组和主机中。

run {one addr.{a, b, c: univ | a = b and b = c}.host} for 1 

令人惊讶的是,生成的图形与上面显示的相同。为什么是这样?

回答

1

可视化器通过为每个指定的关系和集合给出值来显示一个实例。你的第二个例子中只有两个命名关系。如果你想看到一个给定的表达式的关系的价值,你需要命名它,例如像这样:

run {some r: univ -> univ -> univ | 
    r = {a, b, c: univ | a = b and b = c} and 
    one addr.r.host} for 1 
+0

啊!我没有意识到这一点。再次感谢你丹尼尔! –

相关问题