Ein Flugzeug fliegt eine Sequenz von Beinen. Jedes Bein muss von einem geeigneten nächsten Bein gefolgt werden. A NextLegTable
enthält die entsprechenden (Leg -> Leg
) Paare.Wie bekomme ich das nächste Element in einer Seq (Sequenz)?
Also, jedes Paar Beine in einem Flug muss in der NextLegTable
sein. Ich habe diese Einschränkung in der folgenden Fact
implementiert.
Hier ist eine Beschreibung meiner Umsetzung: Jedes Paar Beine (leg
und leg'
), so dass indexOf(leg) + 1 = indexOf(leg')
im NextLegTable
sein muss. Scheinbar ist diese Herangehensweise falsch, da ich "keine Instanzen" bekomme.
Was ist der richtige Ansatz? Wie finde ich bei einem Bein das nächste Bein in der Sequenz?
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
Fantastisch! Danke LEJ –