Hoihoi
Ik ben momenteel in Alloy aan het coden, en wil een OV-netwerkje modelleren.
Gaat hardstikke prima, ik heb lijnen en stations (de metro van a'dam modelleer ik).
Dit is mijn code:
Nu valt het op dat in het laatste fact er een en ander misgaat: hij voert "h2 in h1.verbinding1overstap" uit als commando.
Nu is die h1.verbinding1overstap hierna dus leeg.
Dit komt omdat de in operator als set-toevoeging werkt als je een object in set doet, en als vergelijkingsoperator als je set in set doet.
Nu wil ik dus slim van h2 een set maken; hoe kan ik dat het mooiste doen?
(h2+h2-h2) ofzo zal vast kunnen, maar is mi. te goor voor woorden.
Iemand leuk ideetje?
Ik ben momenteel in Alloy aan het coden, en wil een OV-netwerkje modelleren.
Gaat hardstikke prima, ik heb lijnen en stations (de metro van a'dam modelleer ik).
Dit is mijn code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
| sig Lijn
{
halte : set Halte,
eindStation : set Halte
}
sig Halte
{
lijn : set Lijn,
verbinding : set Halte, //directe verbindingen
verbinding1overstap : set Halte,//verbindingen met 1 overstap
verbinding2overstap : set Halte, //verbindingen met 2 overstappen
bereikbaar : set Halte
}
fact bereikbaar
{
//eerst de haltes een eigen lijn variabele geven
all l : Lijn
{
all h : Halte | h in l.halte <=> l in h.lijn
}
//vervolgens gaan we kijken welke haltes bij elkaar in de lijn zitten. Deze zijn dus direct bereikbaar ZONDER overstappen.
// Deze hebben dan verbinding
all l1 : Lijn
{
all h1,h2: Halte
{
h1 in l1.halte && h2 in l1.halte && h1!=h2 => h2 in h1.verbinding
}
}
//verbinding1overstap
all h1,h2,h3: Halte
{
h2 in h1.verbinding && h3 in h2.verbinding && h3 !in h1.verbinding && (h1!= h2 && h1!= h3) => h3 in h1.verbinding1overstap
}
//in amsterdam is ALLES met ALLES bereikbaar vermits unlimited overstaps (dus geen 'eilandjes')
//NOOT: Deze staat uit om de graf zichtbaar te houden
//bereikbaar=^(verbinding)
}
fact bereikbaar2overstap
{
//verbinding1overstap
all h1, h2,h3 : Halte
{
(h2 in h1.verbinding1overstap ) && (h3 in h2.verbinding) => h3 in h1.verbinding2overstap
}
} |
Nu valt het op dat in het laatste fact er een en ander misgaat: hij voert "h2 in h1.verbinding1overstap" uit als commando.
Nu is die h1.verbinding1overstap hierna dus leeg.
Dit komt omdat de in operator als set-toevoeging werkt als je een object in set doet, en als vergelijkingsoperator als je set in set doet.
Nu wil ik dus slim van h2 een set maken; hoe kan ik dat het mooiste doen?
(h2+h2-h2) ofzo zal vast kunnen, maar is mi. te goor voor woorden.
Iemand leuk ideetje?