首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Alloy4.2 -二元关系的三元关系

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

Stack Overflow用户
提问于 2014-03-07 18:24:43
回答 2查看 507关注 0票数 0

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

所以就像这样:

代码语言:javascript
复制
// addr gives us: {Book -> Name -> Addr}
fun [n:Name] : Set Book -> Addr {
    //return {b->a} where {b->n->a}
}

使用联接和域限制,我只能设法获得二进制关系:{Book -> Name}和{Name -> Addr}。我不知道如何将这些拼接在一起,因为名字是不变的,所以你不能区分。

是否可以用一个函数来完成这个任务,或者我还需要其他的东西呢?

我完全是这方面的初学者,在一种正常的过程语言中,这似乎相当简单。但是,我找不到很好的文档,在我看来,在函数如何工作的问题上,我完全搞错了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-08 15:18:53

或者更简单地说:

代码语言:javascript
复制
fun [n:Name]: Book -> Addr {
   {b:Book,a:Addr | b->n->a in addr}
}

然而,您在函数声明中使用的术语“关系集”和关键字"set“使我怀疑您的意思是否不同。请注意,此函数返回一组元组,而不是一组关系。

票数 1
EN

Stack Overflow用户

发布于 2014-03-07 19:42:29

您可能可以通过理解来计算这个定义:

代码语言:javascript
复制
fun [n:Name]: Book -> Addr {
   {b:Book,a:Addr | b in (addr.a).n }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22257824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档