1
飛機飛行的一系列腿。每條腿都必須跟着一條合適的下一條腿。 A NextLegTable
包含適當的(Leg -> Leg
)對。如何獲得序列(序列)中的下一個項目?
所以,在飛行中每雙腿必須在NextLegTable
。我在下面的Fact
中實現了這個約束。
這是我的實現方式的描述:每一對腿(leg
和leg'
)的,使得indexOf(leg) + 1 = indexOf(leg')
,必須在NextLegTable
。顯然這種方法是錯誤的,因爲我得到了「沒有實例」。
什麼是正確的方法?給定一條腿,我如何在序列中找到它的下一條腿?
sig Flight {
legs: seq Leg
}
sig Leg {}
one sig NextLegTable {
nextLeg: Leg -> Leg
}
fact Flight_legs_In_NexLegTable {
all f: Flight |
all leg, leg': Leg {
leg in f.legs.elems
leg' in f.legs.elems
plus[f.legs.idxOf[leg], 1] = f.legs.idxOf[leg']
(leg -> leg') in NextLegTable.nextLeg
}
}
pred Show (f: Flight) {#f.legs > 1}
run Show
太棒了!謝謝LEJ –