Alloy4.2 - 二元关系的三元关系

时间:2014-03-07 18:24:43

标签: alloy

所以我试图编写一个函数,它接受一组三元关系和一个中间元素,它返回元素匹配的关系集,但不包含自身。 (我们已经知道它是什么)

这样的事情:

// addr gives us: {Book -> Name -> Addr}
fun [n:Name] : Set Book -> Addr {
    //return {b->a} where {b->n->a}
}

通过加入和域名限制,我只能设法获得二元关系:{Book - >姓名}和{姓名 - >地址}。我不知道如何将这些拼接在一起,因为名称是不变的,所以你无法区分它们。

是否可以使用函数执行此操作,还是需要其他功能?

我是一个绝对的初学者,在正常的程序语言中看起来相当简单。但是,我无法找到非常好的文档,而且在我看来,在函数的工作方式方面我完全错了。

2 个答案:

答案 0 :(得分:1)

甚至更简单:

fun [n:Name]: Book -> Addr {
   {b:Book,a:Addr | b->n->a in addr}
}

但是,在函数声明中使用术语“关系集”和关键字“set”会让我想知道你的意思是否有所不同。请注意,此函数返回一组元组,而不是一组关系。

答案 1 :(得分:0)

您可以通过理解来定义:

fun [n:Name]: Book -> Addr {
   {b:Book,a:Addr | b in (addr.a).n }
}