Как реализовать порядок в наборе наборов?

Когда воздушное судно приближается к аэропорту для приземления, процедура захода на посадку воздушного судна делится на переходы. Каждый переход состоит из набора ножек.

sig Transition {
     legs: set Leg 
}
sig 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 ответ

Решение

Почему бы не использовать seq Leg а встроенная последовательность предикатов и функций?

Другие вопросы по тегам