如何在一组集中实现顺序?

时间:2017-03-26 20:57:25

标签: alloy

当飞机接近机场着陆时,飞机的进近程序被划分为过渡。每次过渡都包含一组腿。

sig Transition {
     legs: set Leg 
}
sig Leg {}

转换中的一组腿是有序的。对于每次转换,我希望能够访问转换中的第一条腿,转换中的最后一条腿,并且我想在转换中从一条腿到另一条腿进行导航。因此,我想要第一个,最后一个和下一个函数。

实现这个的最简单方法是什么?我有一个实现工作,但我想知道是否有更简单的东西。我的实现将每个Leg与序列号相关联:

open util/ordering [SequenceNumber]
sig SequenceNumber {}

sig Transition {
     legs: Leg one -> one SequenceNumber
}

然后我创建了自己的实用程序函数:

fun First (t: Transition): Leg {
    t.legs.(min [Leg.(t.legs)])
}

fun Last (t: Transition): Leg {
    t.legs.(max [Leg.(t.legs)])
}

fun Next (t: Transition, leg: Leg): Leg { 
    t.legs.(next [leg.(t.legs)])
}

我希望你能告诉我一个更简单的解决方案。

1 个答案:

答案 0 :(得分:1)

为什么不使用seq Leg和内置序列谓词&功能