如何实现集合中的顺序?
How to implement order in a set of sets?
当飞机接近机场着陆时,飞机的进近程序分为多个过渡。每个转换都由一组腿组成。
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)])
}
我希望你能告诉我一个更简单的解决方案。
为什么不使用 seq Leg
和内置序列谓词和函数?
当飞机接近机场着陆时,飞机的进近程序分为多个过渡。每个转换都由一组腿组成。
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)])
}
我希望你能告诉我一个更简单的解决方案。
为什么不使用 seq Leg
和内置序列谓词和函数?